今天覆習了下二叉樹的基礎知識。
有二叉樹如下:
通過列表生成二叉樹
# node樹節點
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
# 通過list創建二叉樹, 遞歸方式
def createTree(nums, i):
if i < len(nums):
node = TreeNode(nums[i])
node.left = createTree(nums, 2 * i + 1)
node.right = createTree(nums, 2 * i + 2)
return node
# 通過list創建二叉樹, 循環方式
def createTree(nums):
if not nums:
return None
root = TreeNode(nums[0])
node_queue = [root]
front = 0
index = 1
while index < len(nums):
node = node_queue[front]
front += 1
item = nums[index]
index += 1
if item is not None:
node.left = TreeNode(item)
node_queue.append(node.left)
if index >= len(nums):
break
item = nums[index]
index += 1
if item is not None:
node.right = TreeNode(item)
node_queue.append(node.right)
return root
# 循環方式支持 None節點創建
# 比如[5,1,4,None,None,3,2,None,10]
# 展示的樹形如下:
5
1 4
3 2
10
即None代表那個index下的子節點爲空
測試
nums = ['A','B','C','D','E','F']
root = createTree(nums, 0)
遍歷二叉樹
前序遍歷
前序遍歷的規則:
(1)訪問根節點
(2)遍歷左子樹
(3)遍歷右子樹
def traversal(node):
if node:
print node.val
if node.left:
traversal(node.left)
if node.right:
traversal(node.right)
輸出:
A
B
D
E
C
F
中序遍歷
中序遍歷的規則:
(1)遍歷左子樹
(2)訪問根節點
(3)遍歷右子樹
def traversal(node):
if node.left:
traversal(node.left)
if node:
print node.val
if node.right:
traversal(node.right)
輸出:
D
B
E
A
F
C
後序遍歷
後序遍歷的規則:
(1)遍歷左子樹
(2)遍歷右子樹
(3)訪問根節點
def traversal(node):
if node.left:
traversal(node.left)
if node.right:
traversal(node.right)
if node:
print node.val
輸出:
D
E
B
F
C
A
注意:前序中序後序只是調整了打印val的順序