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


  • 相关阅读:
    快逸报表调用存储过程(SqlServer)
    一个睡五分钟等于六个钟头的方法 (转)
    Windows Live Writer For Windows Server 2003
    设计模式装饰者模式
    SqlServerCUBE
    Android 70道面试题汇总不再愁面试
    说服力:让你的PPT会说话
    亮剑Java项目开发案例导航
    初入社会必知的88个潜规则
    android UI进阶之仿iphone的tab效果2
  • 原文地址:https://www.cnblogs.com/xuehaiwuya0000/p/11487703.html
Copyright © 2011-2022 走看看