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 = []
def traversal(root:Optional[TreeNode]):
if root == None:
return
traversal(root.left)
traversal(root.right)
result.append(root.val)
traversal(root)
return result
思路:
注意traversal函数的函数参数:root根节点
注意结束递归条件:当root == None
注意每一次递归的逻辑:根据前中后序遍历,调整result.append(root.val)相对其它两步的位置
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]:
if not root:
return []
stack = [root]
result = []
while stack:
node = stack.pop()
result.append(node.val)
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
return result[::-1]
迭代思想:
将前序遍历的顺序改变一下,中(根节点值)放入result后,左右依次入栈,这样出栈就变成了中右左,再将result数组倒转,就变成了左右中。即后续遍历顺序
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
result = []
st = []
if root:
st.append(root)
while st:
node = st.pop()
if node != None:
st.append(node) #中
st.append(None)
if node.right: #右
st.append(node.right)
if node.left: #左
st.append(node.left)
else:
node = st.pop()
result.append(node.val)
return result
迭代统一代码风格