问题LeetCode给定一棵二叉树的根,返回其节点值的后序遍历。例1:输入:root=[1,null,2,3]输出:[3,2,1]示例2:输入:root=[]输出:[]示例3:输入:root=[1]输出:[1]示例4:输入:root=[1,2]输出:[2,1]例5:输入:root=[1,null,2]输出:[2,1]约束:树中的节点数在[0,100]范围内。-100<=Node.val<=100跟进:递归求解很简单,你能迭代吗?问题是给定一棵二叉树,返回它的后序遍历。例子:输入:[1,null,2,3]1\2/3输出:[3,2,1]进阶:递归算法很简单,你能完成迭代算法吗?思路是先递归遍历左右子树,然后把根节点的值相加。Python3代码#定义二叉树节点。#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclass解决方案:defpostorderTraversal(self,root:TreeNode)->List[int]:#递归res=[]defdfs(root):ifnotroot:return[]dfs(root.left)dfs(root.right)res.append(root.val)dfs(root)returnres返回使用栈来模拟Python3代码#定义一个二叉树节点。#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclass解决方案:defpostorderTraversal(self,root:TreeNode)->List[int]:#代res=[]ifnotroot:returnresstack=[]node=rootwhilestack或node:whilenode:#根节点stack.append(node)#左子树存在ifnode.left:node=node.left#左子树不存在,转右子树else:node=node.right#取出顶层元素node=stack.pop()res.append(node.val)#栈不为空,当前节点为栈顶元素的左节点#stack[-1]为取出的栈顶元素:nodeifstackandnode==stack[-1].left:node=stack[-1].right#没有左子树或右子树,unstackelse:node=NonereturnresGitHublinkPython
