• 数据结构之二叉树汇总额


       二叉树的构造方法:

      1.递归方法:

      

    class Node():
        def __init__(self,value=None):
            self.lchild=None
            self.rchild=None
            self.value=value
    
    class Bitree():
        def __init__(self):
            self.root=None
    
        #采用递归方法
        def add(self,data,node):
            if not self.root:
                self.root=Node(data)
                return
            if data<node.value:
                if not node.lchild:
                    node.lchild=Node(data)
                    return node
                else:
                    return self.add(data,node.lchild)
            else:
                if not node.rchild:
                    node.rchild=Node(data)
                    return node
                else:
                    return self.add(data,node.rchild)

    2.采用队列方法:

    #采用队列方法
        def add(self,data):
            if not self.root:
                self.root=Node(data)
                return
            queue=[self.root]
            while 1:
                node=queue.pop()
                if data < node.value:
                    if not node.lchild:
                        node.lchild = Node(data)
                        return
                    else:
                        queue.append(node.lchild)
                else:
                    if not node.rchild:
                        node.rchild = Node(data)
                        return
                    else:
                        queue.append(node.rchild)

    3.前序中序后序遍历方法:

        # 前序遍历,根,左右
        def front_travel(self, node):
            if not node:
                return
            self.data_list.append(node.value)
            if node.lchild:
                self.front_travel(node.lchild)
            if node.rchild:
                self.front_travel(node.rchild)
    
        # 中序遍历,左根右
        def middle_travel(self, node):
            if not node:
                return
            self.middle_travel(node.lchild)
            self.data_list.append(node.value)
            if node.rchild:
                self.middle_travel(node.rchild)
    # 后序遍历,右左根
        def rear_travel(self, node):
            if not node:
                return
            self.rear_travel(node.rchild)
            if node.lchild:
                self.rear_travel(node.lchild)
            self.data_list.append(node.value)

     4.将数据添加到二叉树模型中,备注数据必须有序,无序数据会导致二叉树左右枝干不对称

     #数据data必须为有序,才能添加二叉树
        def add_module(self,data):
            lengtht=len(data)
            if not lengtht:
                return
            mid=lengtht//2
            self.add(data[mid])
            self.add_module(data[:mid])
            self.add_module(data[mid+1:])


  • 相关阅读:
    contentSize、contentInset和contentOffset区别 分类: iphone开发
    iOS设计模式——Category
    如何更好地限制一个UITextField的输入长度
    UIApplication sharedApplication详细解释-IOS
    IOS --- 对象归档
    iOS 数据持久化之使用NSUserDefaults存储数据
    判断素数 一个数的约数 一个整数的幂次约分
    埃氏筛法
    双六(扩展欧几里得算法)
    矩阵快速幂 模板
  • 原文地址:https://www.cnblogs.com/xuehaiwuya0000/p/11487703.html
Copyright © 2020-2023  润新知