LeetCode——二叉樹的前中後序遍歷題解(Java)
阿新 • • 發佈:2020-11-20
目錄
一、題目
1、給定一個二叉樹,返回它的 前序 遍歷。
示例:
輸入: [1,null,2,3]
1
\
2
/
3
輸出: [1,2,3]
2、給定一個二叉樹,返回它的 中序 遍歷。
示例:
輸入: [1,null,2,3]
1
\
2
/
3
輸出: [1,3,2]
3、給定一個二叉樹,返回它的 後序 遍歷。
示例:
輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [3,2,1]
二、程式碼
前序遍歷
public class Solution { public List<Integer> preorderTraversal(TreeNode root) { //建立一個數組l儲存數值 List<Integer> l = new ArrayList<>(); preorderTraversal(root, l); return l; } private void preorderTraversal(TreeNode root, List<Integer> l) { if (root == null) { return; } //節點值存入陣列 l.add(root.val); preorderTraversal(root.left, l); preorderTraversal(root.right, l); } }
中序遍歷
public class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> l = new ArrayList<>(); inorderTraversal(root, l); return l; } private void inorderTraversal(TreeNode root, List<Integer> l) { if (root == null) { return; } inorderTraversal(root.left, l); l.add(root.val); inorderTraversal(root.right, l); } }
後序遍歷
public class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> l = new ArrayList<>();
inorderTraversal(root, l);
return l;
}
private void inorderTraversal(TreeNode root, List<Integer> l) {
if (root == null) {
return;
}
inorderTraversal(root.left, l);
inorderTraversal(root.right, l);
l.add(root.val);
}
}
三、總結
前序遍歷 先遍歷根節點-左子樹-右子樹
先訪問根節點
如果左節點不為空,前序遍歷左節點
如果右節點不為空,前序遍歷右節點
中序遍歷 先遍歷左子樹->根節點->右子樹
如果是遞迴,則遞迴遍歷左子樹,訪問根節點,遞迴遍歷右子樹
非遞迴過程即:先訪問最左子樹結點,再訪問其父節點,再訪問其兄弟
後序遍歷 先遍歷左子樹->右子樹->根節點
先判斷是否空
然後進行遞迴,最後訪問根節點
總的來說,用遞迴來進行遍歷較簡單。