二叉樹的構造及其前序,中序,後序遍歷 原

今天覆習了下二叉樹的基礎知識。

有二叉樹如下:

 

通過列表生成二叉樹

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章