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


       二叉树的构造方法:

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


  • 相关阅读:
    java8 parallel并行处理实战
    java相关技术问答(二)
    [安卓基础] 007.管理Activity的生命周期
    [Python基础]009.os模块(1)
    [Objective-C] 012_数据持久化_XML属性列表,NSUserDefaults
    SD.Team团队人物形象
    读Pyqt4教程,带你入门Pyqt4 _013
    [Objective-C] 011_数据持久化_NSKeyedArchiver
    [Objective-C] 010_Foundation框架之NSSet与NSMutableSet
    [JavaWeb基础] 007.Struts2的配置和简单使用
  • 原文地址:https://www.cnblogs.com/xuehaiwuya0000/p/11487703.html
Copyright © 2020-2023  润新知