二叉树

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))

posted @ 2020-04-15 17:03  ColaIce  阅读(102)  评论(0)    收藏  举报