题目链接:
正确代码:
- 前序遍历
# 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]
"""
# 迭代法
if not root:
return None
else:
stack = [root]
res = []
while stack:
cur = stack.pop()
res.append(cur.val) # 中
if cur.right: # 右
stack.append(cur.right)
if cur.left: # 左
stack.append(cur.left)
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]
"""
stack = []
cur = root
res = []
while cur or stack:
if cur:
stack.append(cur)
cur = cur.left # 左
else:
cur = stack.pop()
res.append(cur.val) # 中
cur = cur.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]
"""
stack = []
if root:
stack.append(root)
res = []
while stack:
cur = stack.pop()
res.append(cur.val) # 中
if cur.left:
stack.append(cur.left) # 左
if cur.right:
stack.append(cur.right) # 右
res.reverse()
return res