今天复习了下二叉树的基础知识。
有二叉树如下:
通过列表生成二叉树
# 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的顺序