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

今天复习了下二叉树的基础知识。

有二叉树如下:

通过列表生成二叉树

# 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的顺序

猜你喜欢

转载自my.oschina.net/u/914655/blog/1793112