算法 - 二叉树 - 递归遍历

57 阅读1分钟

二叉树遍历分为深度优先和广度优先方式。

  • 深度优先使用递归方式
  • 广度优先使用迭代方式

144. 二叉树的前序遍历 - 力扣(LeetCode)

94. 二叉树的中序遍历 - 力扣(LeetCode)

145. 二叉树的后序遍历 - 力扣(LeetCode)

/**
  * 二叉树节点类
  */
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;
   }
}

递归方式遍历

  1. 前序遍历
/**
 * 前序遍历
 */
class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        pre(root, list);
        return list;
    }

    public void pre(TreeNode node, List<Integer> list){
        if (node == null){
            return ;
        }
        list.add(node.val);
        pre(node.left, list);
        pre(node.right, list);
    }
}
  1. 中序遍历
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        mid(root, list);
        return list;
    }

    public void mid(TreeNode node, List<Integer> list){
        if(node == null){
            return;
        }
        mid(node.left, list);
        list.add(node.val);
        mid(node.right, list);
    }
}
  1. 后序遍历
class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        post(root, list);
        return list;
    }

    public void post(TreeNode node, List<Integer> list){
        if(node == null){
            return;
        }
        post(node.left, list);
        post(node.right, list);
        list.add(node.val);
    }
}