乐趣区

关于leetcode: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/…
著作权归领扣网络所有。商业转载请分割官网受权,非商业转载请注明出处。

二、解题思路

二叉树的问题,用递归就很简略。剖析一下用非递归办法的思路:跟前序、中序、层序一样都要用到栈,后序的程序是左 右 根,所以当一个节点值被取出来时,它的左右子节点要么不存在,要么曾经被拜访过了。先将根结点压入栈,而后定义一个辅助结点 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 是不是卷呀
退出移动版