【算法系列】二叉树的递归遍历

二叉树算法题的思想在于递归。

递归的核心三要素:

  • 递归的参数和返回值
    private void preOrder(TreeNode root, List<Integer> result)
  • 递归的终止条件
        if (root == null) {
            return;
        }
  • 单层递归的逻辑
        result.add(root.val);
        preOrder(root.left, result);
        preOrder(root.left, result);

以前序遍历为例:

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

leetcode的三条题

  • 144.二叉树的前序遍历
  • 145.二叉树的后序遍历
  • 94.二叉树的中序遍历

前序遍历

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

    private void preOrder(TreeNode root, List<Integer> 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;
    }

    private void inOrder(TreeNode root, List<Integer> 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;
    }

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

【算法系列】二叉树的递归遍历_第1张图片

你可能感兴趣的:(算法,算法,leetcode,数据结构)