LeetCode 二叉树的遍历【递归入门】

LeetCode 二叉树的遍历【递归入门】

递归三部曲:

  1. 确定递归函数参数和返回值
  2. 确定终止条件
  3. 确定单层递归的逻辑

伪代码:

//1. 确定递归函数参数和返回值
本题递归函数无返回值,我们采用全局res存储结果,函数参数传入一个node节点即可
//2. 确定终止条件
当node为null时候,表明已经遍历到了某一个子树的末尾,需要return
//3. 确定单层递归的逻辑
先取node的值,也就是先取根的值【下面三行代码,res放在前面即为前序;放在中间为中序;放在末尾为后序】
res.add(node.val);
getVal(node.left);
getVal(node.right);

1 前序遍历 :LeetCode-144

LeetCode 二叉树的遍历【递归入门】_第1张图片

前序遍历:根左右,先取根然后左子树,然后右子树

代码:

class Solution {
    private List<Integer> res = new ArrayList<>();
    public List<Integer> preorderTraversal(TreeNode root) {
        getVal(root);
        return res;
    }
    public void getVal(TreeNode node){
        //如果节点为空,直接返回[递归边界]
        if(node == null){
            return;
        }
        //根
        res.add(node.val);
        //左
        getVal(node.left);
        //右
        getVal(node.right);
    }
}

2 中序遍历

LeetCode 二叉树的遍历【递归入门】_第2张图片

分析:中序遍历,即取值为左根右

class Solution {
    private List<Integer> res = new ArrayList<>();
    public List<Integer> inorderTraversal(TreeNode root) {
        getVal(root);
        return res;
    }
    public void getVal(TreeNode node){
        if(node== null){
            return;
        }
        getVal(node.left);
        res.add(node.val);
        getVal(node.right);
    }

}

3 后续遍历

LeetCode 二叉树的遍历【递归入门】_第3张图片

分析:后序遍历,取值为左右根

代码:

class Solution {
    private List<Integer> res = new ArrayList<>();
    public List<Integer> postorderTraversal(TreeNode root) {
        getVal(root);
        return res;
    }

    public void getVal(TreeNode node){
        if(node == null){
            return;
        }
        getVal(node.left);
        getVal(node.right);
        res.add(node.val);
    }
}

你可能感兴趣的:(LeetCode,leetcode,算法,java,递归,二叉树)