node_dict:
二叉树效果图:
node_list = [
{'data': 'A', 'left': 'B', 'right': 'C', 'is_root': True},
{'data': 'B', 'left': 'D', 'right': 'E', 'is_root': False},
{'data': 'D', 'left': None, 'right': None, 'is_root': False},
{'data': 'E', 'left': 'H', 'right': None, 'is_root': False},
{'data': 'H', 'left': None, 'right': None, 'is_root': False},
{'data': 'C', 'left': 'F', 'right': 'G', 'is_root': False},
{'data': 'F', 'left': None, 'right': None, 'is_root': False},
{'data': 'G', 'left': 'I', 'right': 'J', 'is_root': False},
{'data': 'I', 'left': None, 'right': None, 'is_root': False},
{'data': 'J', 'left': None, 'right': None, 'is_root': False},
]
class Node:
def __init__(self,data,left=None,right=None):
self.data = data
self.left = left
self.right = right
class Tree:
def __init__(self,root=None):
self.root = root
def init_data(self,node_list):
node_dict = {}
for item in node_list:
node = Node(item['data'],item['left'],item['right'])
node_dict[item['data']] = node
if item['is_root']:
self.root = node_dict[item['data']]
'''
注释''' '''也要严格按照缩进要求
# 字典遍历 修改Value:(可能会很慢)
# 如果新增键值对,导致扩容,键值对会重新排序
for key in node_dict.keys():
print(key,node_dict[key])
node = node_dict[key]
#node.left != None
#node.left存储下一节点取值
if node.left:
#将取值转换为指向取值的节点
node.left = node_dict[node.left]
if node.right:
node.right = node_dict[node.right]
'''
for item in node_list:
node = node_dict[item['data']]
if node.left:
node.left = node_dict[node.left]
if node.right:
node.right = node_dict[node.right]
if __name__ == "__main__":
tree = Tree()
tree.init_data(node_list)