LeetCode 0145. 二叉树的后序遍历:二叉树必会算法

Posted Tisfy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 0145. 二叉树的后序遍历:二叉树必会算法相关的知识,希望对你有一定的参考价值。

【LetMeFly】145.二叉树的后序遍历:二叉树必会算法

力扣题目链接:https://leetcode.cn/problems/binary-tree-postorder-traversal/

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历

 

示例 1:

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

示例 2:

输入:root = []
输出:[]

示例 3:

输入:root = [1]
输出:[1]

 

提示:

  • 树中节点的数目在范围 [0, 100]
  • -100 <= Node.val <= 100

 

进阶:递归算法很简单,你可以通过迭代算法完成吗?

方法一:DFS

在学习后序遍历之前,有必要先了解以下前序遍历

可以参考题解:https://letmefly.blog.csdn.net/article/details/126057536

后序遍历于前序遍历的不同之处在于,后序是先遍历左子树和右子树,再遍历根节点的值。

因此,我们只需要把前序遍历代码中遍历根节点的顺序,调整到遍历左右子树节点 之后即可。

前序遍历核心代码:

// 先根再左右子
ans.push_back(root->val);
dfs(root->left);
dfs(root->right);

后续遍历核心代码:

// 先左右子再根
dfs(root->left);
dfs(root->right);
ans.push_back(root->val);

同理,中序遍历核心代码:

// 左子 根 右子
dfs(root->left);
ans.push_back(root->val);
dfs(root->right);
  • 时间复杂度 O ( N ) O(N) O(N),其中 N N N是二叉树节点的个数
  • 空间复杂度 O ( N ) O(N) O(N)

AC代码

C++

class Solution 
private:
    vector<int> ans;

    void dfs(TreeNode* root) 
        if (!root)
            return;
        dfs(root->left);
        dfs(root->right);
        ans.push_back(root->val);
    
public:
    vector<int> postorderTraversal(TreeNode* root) 
        dfs(root);
        return ans;
    
;

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/126057794

以上是关于LeetCode 0145. 二叉树的后序遍历:二叉树必会算法的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode练习(Python):栈类:第145题:二叉树的后序遍历:给定一个二叉树,返回它的 后序 遍历。

Leetcode练习(Python):栈类:第145题:二叉树的后序遍历:给定一个二叉树,返回它的 后序 遍历。

LeetCode二叉搜索树的后序遍历序列

LeetCode二叉搜索树的后序遍历序列

LeetCode-145-二叉树的后序遍历

Leetcode No.145 二叉树的后序遍历