LeetCode題144. 二叉樹的前序遍歷
題目描述:
給定一個二叉樹,返回它的 前序 遍歷。
例子:
輸入: [1,null,2,3]
1
\
2
/
3
輸出: [1,2,3]
進階: 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?
思路:
1.遞迴
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
private List<Integer> list = new ArrayList() ;
public List<Integer> preorderTraversal(TreeNode root) {
if(root == null){
return new ArrayList() ;
}
list.add(root.val) ;
if(root.left != null){
preorderTraversal(root.left);
}
if(root.right != null){
preorderTraversal(root.right);
}
return list ;
}
}
2.迭代
使用棧,沒存入一個節點的值到list集合中,就將這個節點入棧,並且向左遍歷,直到沒有左節點。這時就從棧中取出一個節點(由於棧有先進後出的特點,所以取出的一定是當前左節點的父節點),得到取出節點的右節點。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList() ;
if(root == null){
return list ;
}
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode node = root ;
while(!stack.isEmpty() || node != null){
while(node != null){
list.add(node.val);
stack.push(node);
node = node.left ;
}
node = stack.pop() ;
node = node.right ;
}
return list ;
}
}
相關文章
- Leetcode——144. 二叉樹的前序遍歷LeetCode二叉樹
- 【模板題】- 144. 二叉樹的前序遍歷二叉樹
- 144. 二叉樹的前序遍歷二叉樹
- 144. 二叉樹的前序遍歷(java實現)--LeetCode二叉樹JavaLeetCode
- 144.二叉樹的前序遍歷145.二叉樹的後序遍歷 94.二叉樹的中序遍歷二叉樹
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹
- 二叉樹的建立、前序遍歷、中序遍歷、後序遍歷二叉樹
- 二叉樹建立,前序遍歷,中序遍歷,後序遍歷 思路二叉樹
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- 程式碼隨想錄演算法訓練營day14 | leetcode 144. 二叉樹的前序遍歷、145. 二叉樹的後序遍歷、94. 二叉樹的中序遍歷演算法LeetCode二叉樹
- 個人練習之二叉樹的前序遍歷二叉樹
- LintCode 前序遍歷和中序遍歷樹構造二叉樹二叉樹
- 根據前序遍歷序列、中序遍歷序列,重建二叉樹二叉樹
- 關於二叉樹的前序遍歷、中序遍歷、刪除元素、插入元素二叉樹
- 演算法根據樹的前序遍歷構建二叉樹演算法二叉樹
- 二叉樹的前序、中序、後序三種遍歷二叉樹
- 二叉樹:構造二叉樹(通過前序和中序遍歷)、映象翻轉、層次遍歷二叉樹
- 資料結構與演算法——二叉樹的前序遍歷,中序遍歷,後序遍歷資料結構演算法二叉樹
- Leetcode 889. 根據前序和後序遍歷構造二叉樹LeetCode二叉樹
- 二叉樹的前序,中序,後序遍歷方法總結二叉樹
- LeetCode 105. 從前序與中序遍歷序列構造二叉樹LeetCode二叉樹
- LeetCode-105-從前序與中序遍歷序列構造二叉樹LeetCode二叉樹
- 刷題系列 - Python用非遞迴實現二叉樹前序遍歷Python遞迴二叉樹
- 劍指offer:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。二叉樹
- 刷題筆記:樹的前序、中序、後序遍歷筆記
- Construct Binary Tree from Preorder and Inorder Traversal(前序遍歷和中序遍歷樹構造二叉樹)...Struct二叉樹
- 二叉樹的遍歷二叉樹
- 889. 根據前序和後序遍歷構造二叉樹二叉樹
- 二叉樹---遍歷二叉樹
- 二叉樹遍歷二叉樹
- LeetCode 105. 從前序與中序遍歷序列構造二叉樹 | PytLeetCode二叉樹
- 完全二叉樹的遍歷二叉樹
- PAT 1043 Is It a Binary Search Tree (25分) 由前序遍歷得到二叉搜尋樹的後序遍歷
- Leetcode——94.二叉樹的中序遍歷LeetCode二叉樹
- 玩轉二叉樹(樹的遍歷)二叉樹
- 二叉樹的廣度遍歷和深度遍歷()二叉樹
- 二叉樹遍歷方法二叉樹
- 二叉樹遍歷 -- JAVA二叉樹Java