今天复习了下二叉树的基础知识。node
有二叉树以下:python
# 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下的子节点为空
测试app
nums = ['A','B','C','D','E','F'] root = createTree(nums, 0)
前序遍历的规则:测试
(1)访问根节点
(2)遍历左子树
(3)遍历右子树spa
def traversal(node): if node: print node.val if node.left: traversal(node.left) if node.right: traversal(node.right)
输出:code
A
B
D
E
C
F递归
中序遍历的规则:it
(1)遍历左子树
(2)访问根节点
(3)遍历右子树class
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的顺序