赞
踩
问题描述:
给你二叉树的根节点 root ,返回它节点值的后序遍历。

示例 1:
输入:root = [1,null,2,3]
输出:[1,2,3]
提示:
进阶: 递归算法很简单,你可以通过迭代算法完成吗?

对于节点A而言,顺序为BCA
对于节点B而言,顺序为DEB
对于节点D而言,顺序为FD
对于节点E而言,顺序为GE
对于节点F,G,C而言,顺序就是F,G,C
结合起来就是[[FD][GE]B]CA
综上所述后序遍历最终结果为FDGEBCA
核心思想:递归法求二叉树的后序遍历
python3代码如下:
# 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 preorderTraversal(self, root: TreeNode) -> List[int]: arr=[] def preorder(root:TreeNode,arr:List[int]): if root: arr.append(root.val) preorder(root.left,arr) preorder(root.right,arr) preorder(root,arr) return arr
核心思想:非递归法求二叉树的后序遍历(迭代法)
# 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: TreeNode) -> List[int]: res = list() stack = list() prev = None while root or stack: #左子树进栈 while root: stack.append(root) root = root.left #最左子树出栈 root = stack.pop() if not root.right or root.right == prev: res.append(root.val) prev = root root = None else: #如果有右子树 stack.append(root) root = root.right return res
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。