二叉树的递归遍历

二叉树的递归遍历

题目链接:
前序遍历: LeetCode 144
中序遍历: LeetCode 94
后序遍历: LeetCode 145
描述
给你二叉树的根节点 root ,返回它节点值的 前序中序后序 遍历。
在这里插入图片描述
示例1:前序遍历

输入:root = [1,null,2,3]
输出:[1,2,3]

示例2:中序遍历

输入:root = [1,null,2,3]
输出:[1,3,2]

示例3:后序遍历

输入:root = [1,null,2,3]
输出:[3,2,1]

思路

这里前中后,其实指的就是中间节点的遍历顺序,只要大家记住 前中后序指的就是中间节点的位置就可以了。
看如下中间节点的顺序,就可以发现,中间节点的顺序就是所谓的遍历方式
前序遍历:中左右
中序遍历:左中右
后序遍历:左右中

二叉树的定义

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> result = new ArrayList<>();
        preorder(root, result);
        return result;
    }

    public void preorder(TreeNode root, List result){
        if(root == null){
            return;
        }
        result.add(root.val);
        preorder(root.left, result);
        preorder(root.right, result);
    }
}

中序遍历

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

    public void inorder(TreeNode root, List result){
        if(root == null){
            return;
        }
        inorder(root.left,result);
        result.add(root.val);
        inorder(root.right,result);

    }
}

后序遍历

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

    public void postorder(TreeNode root, List list){
        if(root == null){
            return;
        }
        postorder(root.left,list);
        postorder(root.right,list);
        list.add(root.val);
    }
}
posted @ 2024-10-31 21:11  dwhere  阅读(8)  评论(0编辑  收藏  举报