写点什么

leetcode 145. Binary Tree Postorder Traversal 二叉树的后序遍历 (中等)

作者:okokabcd
  • 2022 年 10 月 09 日
    山东
  • 本文字数:746 字

    阅读完需:约 2 分钟

leetcode 145. 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


来源:力扣(LeetCode)链接:https://leetcode.cn/problems/binary-tree-postorder-traversal著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、解题思路

二叉树的问题,用递归就很简单。分析一下用非递归方法的思路:跟前序、中序、层序一样都要用到栈,后序的顺序是左 右 根,所以当一个节点值被取出来时,它的左右子节点要么不存在,要么已经被访问过了。先将根结点压入栈,然后定义一个辅助结点 head,while 循环的条件是栈不为空,在循环中,首先将栈顶结点 t 取出来,如果栈顶结点没有左右子结点,或者其左子结点是 head,或者其右子结点是 head 的情况下。将栈顶结点值加入结果 res 中,并将栈顶元素移出栈,然后将 head 指向栈顶元素;否则的话就看如果右子结点不为空,将其加入栈,再看左子结点不为空的话,就加入栈,注意这里先右后左的顺序是因为栈的后入先出的特点,可以使得左子结点先被处理。

三、解题方法

3.1 Java 实现

public class Solution {    public List<Integer> postorderTraversal(TreeNode root) {        List<Integer> list = new ArrayList<>();        traverse(list, root);        return list;    }

public void traverse(List<Integer> list, TreeNode root) { if (root == null) { return; } traverse(list, root.left); traverse(list, root.right); list.add(root.val); }}
复制代码

四、总结小记

  • 2022/10/9 上 k8s 是不是卷呀

发布于: 刚刚阅读数: 3
用户头像

okokabcd

关注

还未添加个人签名 2019.11.15 加入

一年当十年用的Java程序员

评论

发布
暂无评论
leetcode 145. Binary Tree Postorder Traversal  二叉树的后序遍历 (中等)_LeetCode_okokabcd_InfoQ写作社区