【LeetCode】 二叉树的三种遍历方式 前序 中序 后序 递归方式

前言

三种遍历方式对应着LeetCode的三道题目,分别是:
前序遍历:144. Binary Tree Preorder Traversal
中序遍历:94. Binary Tree Inorder Traversal
后序遍历:145. Binary Tree Postorder Traversal

先说一下,递归方式很简单,所以目前本文暂且都是递归方式,迭代方式还没添上,后续更新

三种遍历方式把,长得贼像,其实就是一个先添加哪个节点的问题

举例的二叉树

在这里插入图片描述
总的来说把,除了空二叉树,这个树把树的每个节点的所有情况都包括了,拿来举例比较好
前序遍历:A → B → D → E → G → C → F
中序遍历:D → B → G → E → A → C → F
后序遍历:D → G → E → B → F → C → A

树的数据结构

这是自定义的一个TreeNode,很简单的结构,左节点、右节点、本身的值

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x) {
        val = x;
    }
}

递归方式

前序遍历

在这里插入图片描述

class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> res = new ArrayList<>();
        if (root == null) return res;
        res.add(root.val);
        res.addAll(preorderTraversal(root.left));
        res.addAll(preorderTraversal(root.right));
        return res;
    }
}

中序遍历

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

后序遍历

class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> res = new ArrayList<>();
        if (root == null) return res;
        res.addAll(postorderTraversal(root.left));
        res.addAll(postorderTraversal(root.right));
        res.add(root.val);
        return res;
    }
}

迭代方式

https://leetcode.com/problems/binary-tree-postorder-traversal/discuss/45551/Preorder-Inorder-and-Postorder-Iteratively-Summarization

注意链接是国际版leetcode,有可能会自动转向中国版leetcode

发布了129 篇原创文章 · 获赞 147 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq1515312832/article/details/104251742