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
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹
- 144.二叉樹的前序遍歷145.二叉樹的後序遍歷 94.二叉樹的中序遍歷二叉樹
- 144. 二叉樹的遍歷「前序、中序、後序」 Golang實現二叉樹Golang
- 程式碼隨想錄演算法訓練營day14 | leetcode 144. 二叉樹的前序遍歷、145. 二叉樹的後序遍歷、94. 二叉樹的中序遍歷演算法LeetCode二叉樹
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- 根據前序遍歷序列、中序遍歷序列,重建二叉樹二叉樹
- LeetCode-105-從前序與中序遍歷序列構造二叉樹LeetCode二叉樹
- LeetCode 105. 從前序與中序遍歷序列構造二叉樹LeetCode二叉樹
- Leetcode 889. 根據前序和後序遍歷構造二叉樹LeetCode二叉樹
- 個人練習之二叉樹的前序遍歷二叉樹
- N叉樹——前序遍歷
- LeetCode 105. 從前序與中序遍歷序列構造二叉樹 | PytLeetCode二叉樹
- 二叉樹的前序、中序、後序三種遍歷二叉樹
- 二叉樹:構造二叉樹(通過前序和中序遍歷)、映象翻轉、層次遍歷二叉樹
- 二叉樹的前序,中序,後序遍歷方法總結二叉樹
- 刷題系列 - Python用非遞迴實現二叉樹前序遍歷Python遞迴二叉樹
- LeetCode102.二叉樹的層序遍歷LeetCode二叉樹
- Leetcode——94.二叉樹的中序遍歷LeetCode二叉樹
- [Leetcode]102.二叉樹的層次遍歷LeetCode二叉樹
- 劍指offer:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。二叉樹
- 刷題筆記:樹的前序、中序、後序遍歷筆記
- Leetcode 演算法題解系列 - 二叉樹的層序遍歷LeetCode演算法二叉樹
- PAT 1043 Is It a Binary Search Tree (25分) 由前序遍歷得到二叉搜尋樹的後序遍歷
- 二叉樹的遍歷二叉樹
- LeetCode-107-二叉樹的層序遍歷 IILeetCode二叉樹
- 889. 根據前序和後序遍歷構造二叉樹二叉樹
- 二叉樹遍歷二叉樹
- 二叉樹---遍歷二叉樹
- LeetCode 熱題 HOT 100 Java題解——94. 二叉樹的中序遍歷LeetCodeJava二叉樹
- 完全二叉樹的遍歷二叉樹
- 玩轉二叉樹(樹的遍歷)二叉樹
- 刷題系列 - 給出前序和後序遍歷佇列,構造對應二叉樹佇列二叉樹
- 二叉樹遍歷方法二叉樹
- 二叉樹遍歷 -- JAVA二叉樹Java