题目:
给你一棵二叉树的根节点
root
,返回其节点值的 后序遍历 。来源:力扣(LeetCode)
链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
示例:
示例 1:
输入:root = [1,null,2,3]
输出:[3,2,1]
示例 2:输入:root = []
输出:[]
示例 3:输入:root = [1]
输出:[1]
解法:
使用栈,直到栈或root为空停止。
首先,入栈,直到遇到叶结点,从左到右,接着弹出栈顶,赋给root,记录值,然后更新root,如果栈不空且root是左结点,那么下一步迭代右结点,否则说明root是右结点,那么下一步迭代根结点。
代码:
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]: result = [] stack = [] while root or stack: while root: stack.append(root) root = root.left if root.left else root.right root = stack.pop() result.append(root.val) root = stack[-1].right if stack and stack[-1].left == root else None return result