轉載一下:
https://www.jianshu.com/p/b4757b543aa8
我自己最常用的是樹結構的構建過程,包括兩部分:
1、結構體
''' 樹的數據結構 ''' class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None
2、使用list創建樹:
def create_tree(nodes): """ 根據列表構建一棵二叉樹 :param nodes: 層次遍歷序列 :return: 二叉樹的根節點 """ def helper(node, i): # 用列表遞歸創建二叉樹, if i < len(nodes): # 當下標索引滿足條件時 if nodes[i] in ['#', None]: # 如果列表中下標為i的結點為空 return None # 返回None else: node = TreeNode(nodes[i]) # 構建當前結點 node.left = helper(node.left, 2 * i + 1) # 構建左子樹,通過下標查找 node.right = helper(node.right, 2 * i + 2) # 構建右子樹,通過下標查找 return node # 返回根節點為下標為i的元素的子樹 return node # 返回根節點 root = TreeNode(0) # 臨時結點 root = helper(root, 0) # 建立樹 return root # 返回樹的根節點
列表中的數據的順序與層序遍歷的結果相同。
3、調用上述函數create_tree(nodes)
創建樹,並將返回的根節點保存在root中:
lst = [5,1,4,None,None,3,6]
root = create_tree(lst)
如果創建一個節點實例,代碼如下:
a, b = TreeNode(1), TreeNode(3)