二叉树
class BinTreeNode(object):
def init(self,data,left=None,right=None):
self.data,self.left,self.right = data,left,right
class BinTree(BinTreeNode):
def init(self,root=None):
self.root = root
@classmethod
def build_from(cls,node_list):
'''
第一次遍历创建二叉树、
第二次遍历给节点赋值。
'''
node_dict = {}
for node_data in node_list:
data = node_data['data']
node_dict[data] = BinTreeNode(data)
for node_data in node_list:
data = node_data['data']
node = node_dict[data]
if node_data['is_root']:
root = node
node.left = node_dict.get(node_data['left'])
node.right = node_dict.get(node_data['right'])
return cls(root)
def pre(self,subtree):
if subtree is not None:
print(subtree.data)
self.pre(subtree.left)
self.pre(subtree.right)
def mid(self,subtree):
if subtree is not None:
self.mid(subtree.left)
print(subtree.data)
self.mid(subtree.right)
def next(self,subtree):
if subtree is not None:
self.next(subtree.left)
self.next(subtree.right)
print(subtree.data)
node_list = [
{'data':'A','left':'B','right':'C','is_root':'True'},
{'data':'B','left'😂','right':'E','is_root':'False'},
{'data'😂','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'},
]
btree = BinTree.build_from(node_list)
print(btree.pre(btree.root))

浙公网安备 33010602011771号