前序遍历
根-左-右
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def preorderTraversal(self , root: TreeNode) -> List[int]:
res = []
def preorder(root):
if not root:
return res
res.append(root.val)
preorder(root.left)
preorder(root.right)
preorder(root)
return res
中序遍历
左-根-右
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def inorderTraversal(self , root: TreeNode) -> List[int]:
res = []
def inorder(root):
if not root:
return res
inorder(root.left)
res.append(root.val)
inorder(root.right)
inorder(root)
return res
后序遍历
左-右-根
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def postorderTraversal(self , root: TreeNode) -> List[int]:
res = []
def postorder(root):
if not root:
return res
postorder(root.left)
postorder(root.right)
res.append(root.val)
postorder(root)
return res
层序遍历
该二叉树层序遍历的结果是
[
[3],
[9,20],
[15,7]
]
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrder(self , root: TreeNode) -> List[List[int]]:
res = []
if not root:
return res
queue = []
queue.append(root)
while queue:
tmp = []
for _ in range(len(queue)):
node = queue.pop(0)
tmp.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
res.append(tmp)
return res
之形遍历
该二叉树之形遍历的结果是
[
[3],
[20,9],
[15,7]
]
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def Print(self , pRoot: TreeNode) -> List[List[int]]:
res = []
if not pRoot:
return res
queue = []
queue.append(pRoot)
k = 0
while queue:
tmp = []
for _ in range(len(queue)):
node = queue.pop(0)
tmp.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
if k % 2:
tmp[:] = tmp[::-1]
res.append(tmp)
k += 1
return res