1. 程式人生 > >LeetCode中二叉樹遍歷問題

LeetCode中二叉樹遍歷問題

前置知識

二叉樹遍歷的相關知識, 可以參考我的另外一篇二分搜尋樹的博文,地址如下:
https://blog.csdn.net/love905661433/article/details/82981527

前序遍歷

LeetCode-144. 二叉樹的前序遍歷

題目

給定一個二叉樹,返回它的 前序 遍歷。

示例:

輸入: [1,null,2,3]  
   1
    \
     2
    /
   3 

輸出: [1,2,3]

進階: 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?

解題

class Solution {

    public List<
Integer>
preorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<>(); preorderTraversal(root, result); return result; } private void preorderTraversal(TreeNode root, List<Integer> result) { if (root == null) { return
; } result.add(root.val); preorderTraversal(root.left, result); preorderTraversal(root.right, result); } }

中序遍歷

LeetCode-94. 二叉樹的中序遍歷

題目

給定一個二叉樹,返回它的中序 遍歷。

示例:

輸入: [1,null,2,3]
   1
    \
     2
    /
   3

輸出: [1,3,2]
進階: 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?

解題

class Solution {

    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        inorderTraversal(root, result);
        return result;
    }

    private void inorderTraversal(TreeNode root, List<Integer> result) {
        if (root == null) {
            return;
        }
        inorderTraversal(root.left, result);
        result.add(root.val);
        inorderTraversal(root.right, result);
    }
}

後序遍歷

LeetCode-145. 二叉樹的後序遍歷

題目

給定一個二叉樹,返回它的 後序 遍歷。

示例:

輸入: [1,null,2,3]  
   1
    \
     2
    /
   3 

輸出: [3,2,1]

進階: 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?

解題

class Solution {

    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        postorderTraversal(root, result);
        return result;
    }

    private void postorderTraversal(TreeNode root, List<Integer> result) {
        if (root == null) {
            return;
        }

        postorderTraversal(root.left, result);
        postorderTraversal(root.right, result);
        result.add(root.val);
    }
}

總結

使用遞迴方法解決二叉樹的遍歷是非常簡單的, 如果使用非遞迴的方式的話, 就稍微複雜一點, 可以使用棧來輔助, 其實遞迴其實也是使用了棧的, 不過是系統棧而已, 所以可以顯式的使用棧來模擬系統棧