zoukankan      html  css  js  c++  java
  • 数据结构之二叉树汇总额

       二叉树的构造方法:

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


  • 相关阅读:
    Hsqldb中设置主键,并让主键自增
    解决Hsqldb指针只能单向移动,不能回滚问题(.first())
    MySql服务的启动和停止
    jetty和tomcat比较
    查看某一端口被什么程序占用
    小程序修改swiper小圆点
    小程序返回上一页。或者某一页上刷新返回页
    小程序或者vue商品秒杀倒计时
    小程序 wx.switchTab 不能带参数的解决办法
    微信小程序倒计时60S
  • 原文地址:https://www.cnblogs.com/xuehaiwuya0000/p/11487703.html
Copyright © 2011-2022 走看看