美文网首页
使用插入数据的方法构造一颗二叉树

使用插入数据的方法构造一颗二叉树

作者: dwq1666666 | 来源:发表于2019-12-24 15:39 被阅读0次
    """
    二叉搜索树定义:
        1,每个节点上都有数据
        2,当前节点的左节点数据比当前节点的数据小,并且当前节点的所有左节点数据都比当前节点的数据小
        3,当前节点的右节点数据比当前节点的数据大,并且当前节点的所有右节点数据都比当前节点的数据大
    """
    
    
    class Tree:
        def __init__(self):
            self.root = None
    
        def insert(self, data):
    
            if self.root is None:
                self.root = Node(data)
                return
    
            current_node = self.root
    
            while current_node is not Node:
    
                if current_node.data == data:   # 这个数据已经在里面则跳出
                    return
    
                elif data > current_node.data:    # 当前这个节点的值小于需要插入的值
                    if current_node.right is None:      # 如果右节点为空插入这个节点数据
                        current_node.right = Node(data)
                    else:                               # 不为空的时候需要继续比较下一级
                        current_node = current_node.right
                else:   # 当前节点的数据大于需要插入的数据
                    if current_node.left is None:
                        current_node.left = Node(data)
                    else:
                        current_node = current_node.left
    
        def print_tree(self, list_type=0):    # 遍历输出这颗树
            self.print_node(self.root, list_type)
    
        def print_node(self, node, list_type):
    
            if list_type == 0:  # 中遍历
                if node.left is not None:
                    self.print_node(node.left, list_type)
                print(node.data)
    
                if node.right is not None:
                    self.print_node(node.right, list_type)
            elif list_type == 1:    # 前序遍历
                print(node.data)
                if node.left is not None:
                    self.print_node(node.left, list_type)
                if node.right is not None:
                    self.print_node(node.right, list_type)
            elif list_type == 2:    # 后序遍历
                if node.left is not None:
                    self.print_node(node.left, list_type)
                if node.right is not None:
                    self.print_node(node.right, list_type)
                print(node.data)
    
    
    class Node:
        def __init__(self, data):
            self.data = data
            self.left = None
            self.right = None
    
    
    def get_data():
        return [8, 2, 21, 100, 58, 22, 75, 67, 61]
    
    
    def main():
        n = int(input())
        data = [0] * n
        # data = get_data()
        for i in range(n):
            data[i] = int(input())
    
        tree = Tree()
        for i in data:
            tree.insert(i)
    
        tree.print_tree(2)
        return
    
    
    if __name__ == '__main__':
        main()
    
    

    相关文章

      网友评论

          本文标题:使用插入数据的方法构造一颗二叉树

          本文链接:https://www.haomeiwen.com/subject/yzkfoctx.html