二叉树的构造及其前序,中序,后序遍历

今天复习了下二叉树的基础知识。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的顺序

相关文章
相关标签/搜索