一、前序遍历
题目描述:
解法1:递归
# 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]
"""
# 用来保存结果
li=[]
def get(root): # 前序遍历。根左右
if root==None:
return
li.append(root.val) # 根
get(root.left) # 左子树
get(root.right) # 右子树
get(root)
return li
方法2:迭代(用栈)
# 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 []
stack=[root] # 栈
res=[] # 用于存放结果
# stack.append(root) 根节点入栈
while(stack):
node=stack.pop()
res.append(node.val)
if node.right: # 先进右
stack.append(node.right)
if node.left: # 后进左
stack.append(node.left)
return res
二、后序遍历
题目描述:
解法1:递归
# 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]
"""
# 用啦保存结果
result=[]
def get(root): #后序遍历。左右根
if root==None:
return
get(root.left) # 左
get(root.right) # 右
result.append(root.val) # 根
get(root)
return result
方法2:迭代(用栈)
# 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 []
stack=[root]
res=[]
while stack:
node=stack.pop()
res.append(node.val) # 先处理中间节点
if node.left: # 左孩子先入栈
stack.append(node.left)
if node.right: # 右孩子入栈
stack.append(node.right)
return res[::-1]
三、中序遍历
题目描述:
解法1:递归
# 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]
"""
result=[] # 用于保存结果
def get(root): # 中序遍历。左根右
if root==None:
return
get(root.left)
result.append(root.val)
get(root.right)
get(root)
return result