题目地址:Binary Tree Postorder Traversal - LeetCode


Given a binary tree, return the postorder traversal of its nodes’ values.

Example:

Input: [1,null,2,3]1\2/3Output: [3,2,1]

Follow up: Recursive solution is trivial, could you do it iteratively?


经典的二叉树后续遍历,最简单的递归做法。
Python解法如下:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = Noneclass Solution:def postorderTraversal(self, root: TreeNode) -> List[int]:def helper(root, l):if root is None:returnhelper(root.left, l)helper(root.right, l)l.append(root.val)l = []helper(root, l)return l

迭代做法要麻烦一点,不容易想到。
比较好的做法是先序遍历的结果反向输出。
Python解法如下:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = Noneclass Solution:def postorderTraversal(self, root: TreeNode) -> List[int]:if root is None:return []stack, output = [root, ], []while stack:root = stack.pop()output.append(root.val)if root.left is not None:stack.append(root.left)if root.right is not None:stack.append(root.right)return output[::-1]

时间复杂度为O(n),空间复杂度为O(1)。

C++解法如下:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {public:vector<int> postorderTraversal(TreeNode *root) {vector<int> result;stack<TreeNode *> l;if (root == nullptr) {return result;}l.push(root);while (!l.empty()) {auto curr = l.top();l.pop();result.push_back(curr->val);if (curr->left != nullptr) {l.push(curr->left);}if (curr->right != nullptr) {l.push(curr->right);}}std::reverse(result.begin(), result.end());return result;}
};

LeetCode 145. Binary Tree Postorder Traversal--后序遍历--先序遍历反向输出--递归,迭代--C++,Python解法相关推荐

  1. 【二叉树的迭代版后序遍历】LeetCode 145. Binary Tree Postorder Traversal

    LeetCode 145. Binary Tree Postorder Traversal Solution1:递归版答案 二叉树的后序遍历递归版是很简单的,关键是迭代版的代码既难理解又难写!但听了花 ...

  2. LeetCode 145. Binary Tree Postorder Traversal

    原题链接在这里:https://leetcode.com/problems/binary-tree-postorder-traversal/ 题目: Given a binary tree, retu ...

  3. LeetCode:145. Binary Tree Postorder Traversal

    总共想出了四种方法来做. 第一种是递归,不说了.后面集中都是迭代. 第二种是使用一个栈,而且借助一个set来记录哪些node是访问过它的子节点的,防止重复访问.缺点是需要额外的set的空间 class ...

  4. 145. Binary Tree Postorder Traversal

    Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary ...

  5. Leetcode 之Binary Tree Postorder Traversal(44)

    后序遍历,比先序和中序都要复杂.访问一个结点前,需要先判断其右孩子是否被访问过.如果是,则可以访问该结点:否则,需要先处理右子树. vector<int> postorderTravers ...

  6. 145. Binary Tree Postorder Traversal 二叉树的后序遍历

    给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1\2/3 输出: [3,2,1] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? DFS 今天这道题比较简单,直 ...

  7. 【二叉树迭代版中序遍历】LeetCode 94. Binary Tree Inorder Traversal

    LeetCode 94. Binary Tree Inorder Traversal Solution1:递归版 二叉树的中序遍历递归版是很简单的,中序遍历的迭代版需要特殊记一下! 迭代版链接:htt ...

  8. 5. Binary Tree Postorder Traversal

    Binary Tree Postorder Traversal Given a binary tree, return the postorder traversal of its nodes' va ...

  9. 【二叉树迭代版前序遍历】LeetCode 144. Binary Tree Preorder Traversal

    LeetCode 144. Binary Tree Preorder Traversal Solution1:递归版 二叉树的前序遍历递归版是很简单的,前序遍历的迭代版相对是最容易理解的. 迭代版链接 ...

最新文章

  1. 关于qte illegal instruction的一些心得
  2. python函数式编程读取数据时出现错误_写 Python 代码不可不知的函数式编程技术...
  3. oracle 存储过程 输入,Oracle 存储过程加密方法
  4. ubuntu在线安装和卸载libusb
  5. 父子沪c转大牌过户_机动车异地过户(转籍)
  6. VGG网络结构(二)
  7. 实数在java中的表示,java - 如何在Z3(Java)中从模型中获取实数值作为小数(双精度)? - SO中文参考 - www.soinside.com...
  8. 日常踩坑:python的dlib库安装不成功,版本对应问题
  9. python练手程序_写的python练习程序
  10. linux iptables添加mysql访问
  11. java+log4j+是异步吗_log4j2用asyncRoot配置异步日志是如何使用disruptor
  12. 浙江大学公共管理学院与阿里云计算有限公司达成战略合作 | 凌云时刻
  13. 手机qq怎么添加相册表情包_手机qq怎么制作表情包
  14. php公众号模板在哪,微信公众号页面模板在哪里设置的?微信公众号页面模板怎么设置?...
  15. R Fisher精确检验
  16. 两年的前端程序员的反省与总结
  17. /hv/hv_go.h:14:27: fatal error: metslib/mets.hh: No such file or director解决办法
  18. 怎么选择自己合适的LED驱动IC?
  19. 【小程序开发原创】小程序裁剪图片上传头像,二维码源码
  20. Gabor滤波器特征提取原理讲解及c++实现

热门文章

  1. News | 经有限数据研究显示瑞德西韦有望治疗冠状病毒患者
  2. RDKit | 可视化分子来自于xyz文件
  3. livechart 只显示 y 值_基于Python语言的SEGY格式地震数据读取与显示编程
  4. pip 20.3 新版本发布!即将抛弃 Python 2.x
  5. 海南大学植物保护学院刘铜教授课题组招聘简介
  6. Microbiome:宏基因组揭示冻土带、温带草原和热带土壤抗性的特征
  7. TEE综述:植物—土壤反馈(PSF):自然和农业科学间的桥梁
  8. Nature:原来益生菌是这么搞定致病菌的
  9. Cell: 为了PK抗生素而服用益生菌?后果竟然如此严重
  10. 轻松看懂机器学习十大常用算法