二叉树的前序遍历
递归很简单,注意迭代法。
迭代法思路:先将根节点的左节点全部压入栈中,通过一个for循环完成,然后弹出栈顶元素,没弹出一个栈顶元素,就将其赋值给root,然后将这个root再进行上面的迭代
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def preorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
# self.res = []
# self.helper(root)
# return self.res
# def helper(self, root):
# if not root:
# return
# self.res.append(root.val)
# self.helper(root.left)
# self.helper(root.right)
if not root:
return []
stack, res = [], []
while stack or root:
while root:
res.append(root.val)
stack.append(root)
root = root.left
root = stack.pop()
root = root.right
return res
二叉树的中序遍历
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if not root:
return []
res, stack = [], []
while stack or root:
while root:
stack.append(root)
root = root.left
root = stack.pop()
res.append(root.val)
root = root.right
return res
二叉树的后续遍历
迭代
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def postorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if not root:
return []
res, stack = [], []
while stack or root:
while root:
res.append(root.val)
stack.append(root)
root = root.right
root = stack.pop()
root = root.left
return res[::-1]