leetcode 145. Binary Tree Postorder Traversal 二叉树的后序遍历 (中等)
一、题目大意
给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。
示例 1:
输入:root = [1,null,2,3]示例 2:
输出:[3,2,1]
输入:root = []示例 3:
输出:[]
输入:root = [1]提示:
输出:[1]
- 树中节点的数目在范围 [0, 100] 内
- -100 <= Node.val <= 100
链接:https://leetcode.cn/problems/...
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、解题思路 【leetcode 145. Binary Tree Postorder Traversal 二叉树的后序遍历 (中等)】二叉树的问题,用递归就很简单。分析一下用非递归方法的思路:跟前序、中序、层序一样都要用到栈,后序的顺序是左 右 根,所以当一个节点值被取出来时,它的左右子节点要么不存在,要么已经被访问过了。先将根结点压入栈,然后定义一个辅助结点 head,while 循环的条件是栈不为空,在循环中,首先将栈顶结点t取出来,如果栈顶结点没有左右子结点,或者其左子结点是 head,或者其右子结点是 head 的情况下。将栈顶结点值加入结果 res 中,并将栈顶元素移出栈,然后将 head 指向栈顶元素;否则的话就看如果右子结点不为空,将其加入栈,再看左子结点不为空的话,就加入栈,注意这里先右后左的顺序是因为栈的后入先出的特点,可以使得左子结点先被处理。
三、解题方法 3.1 Java实现
public class Solution {
public List postorderTraversal(TreeNode root) {
List list = new ArrayList<>();
traverse(list, root);
return list;
}public void traverse(List list, TreeNode root) {
if (root == null) {
return;
}
traverse(list, root.left);
traverse(list, root.right);
list.add(root.val);
}
}
四、总结小记
- 2022/10/9 上k8s是不是卷呀
推荐阅读
- LeetCode 题解|7. 整数反转
- 算法习题|[leetcode] 138.复制带随机指针的链表(C语言)
- 霍乱时期的Python之路|【Leetcode】89. 格雷编码(Gray Code)
- #|【Task12】LeetCode腾讯精选打卡
- leetcode|【JS】实现 strStr()
- python|力扣 leetcode 1319. 连通网络的操作次数 (python)并查集模板快速解及树的高效解
- 刷题第13天(LeetCode|刷题第13天(LeetCode #43.字符串相乘)
- 14.最长公共前缀(LeetCode)——C语言
- LeetCode|【C语言刷LeetCode】717. 1 比特与 2 比特字符(E)
- 数据结构|Leetcode——989. 数组形式的整数加法