`
lanqiu17
  • 浏览: 17666 次
社区版块
存档分类
最新评论

python实现二叉查找树

阅读更多

这次用完成的是二叉树,是一种简单的树型结构。同样使用python实现 多的不说了,上代码吧。

# -*- coding: cp936 -*-
#---------------------------------------------
#                                             
# author  chile                                   
# version  1.0                                
# date  2014-02-17                                       
# desc 二叉树                      
#                                             
#                                            
#                                            
#---------------------------------------------

class bintree:
    def __init__(self):
        self.root = None
        
    # 前驱节点
    def treePredecessor(self,entry):
        if entry.left != None:
            return self.maxTree(entry.left)
        preNode = entry.parent
        tempNode = entry
        while preNode != None and preNode.right.value != entry.value:
            tempNode = preNode
            preNode = preNode.parent
        return preNode
        
    
    #后继节点      
    def treeSuccessor(self,entry):
        if entry.right != None:
            return self.minTree(entry.right)
        preNode = entry.parent
        tempNode = entry
        while preNode != None and preNode.left.value != entry.value:
            tempNode = preNode
            preNode = preNode.parent
        return preNode
    
    def add(self,value):
        tempNode = self.root
        parentNode = None
        entry = bintree.entry(value = value)
        while tempNode != None:
            parentNode = tempNode
            if cmp(value,parentNode.value) < 0:
                tempNode = tempNode.left
            else:
                tempNode = tempNode.right
        if parentNode == None:
            self.root = entry
        elif cmp(value,parentNode.value) < 0:
            parentNode.left = entry
            entry.parent = parentNode
        else:
            parentNode.right = entry
            entry.parent = parentNode
    
    #这里删除是全部删除节点(包括所有子节点)
    def remove(self,value):
        root = self.root
        parentNode = None
        if value == root.value:
            root.left = None
            root.right = None
        while root != None:
            parentNode = root.parent
            if value == root.value:
                root.left = None
                root.right = None
                if parentNode.left != None and parentNode.left.value == value:
                    parentNode.left = None
                    break
                else:
                    parentNode.right = None
                    break
            elif cmp(value,root.value) < 0:
                root = root.left
            else:
                root = root.right
    
    #查找节点
    def search(self,value):
        root = self.root
        while root != None and root.value != value:
            if cmp(value,root.value) < 0:
                root = root.left
            else:
                root = root.right
        return root
    
    #最小值的节点,其实就是找左边的叶子节点
    def minTree(self,root):
        entry = root
        while entry.left != None:
            entry = entry.left
        return entry
    
    #最大值的节点
    def maxTree(self,root):
        entry = root
        while entry.right != None:
            entry = entry.right
        return entry
                
    
    #中序遍历
    def iterator(self,root):
        if root != None:
            self.iterator(root.left)
            print root.value
            self.iterator(root.right)
        
    
    class entry:
        def __init__(self, value=None):
            self.left = None
            self.right = None
            self.parent = None
            self.value = value
            
arr = [15,5,3,12,10,13,6,7,16,20,18,23]
tree = bintree()
for val in arr:
    tree.add(val)
 
tree.iterator(tree.root)
node = tree.search(16)
print node.left , node.right , node.parent.value
print tree.maxTree(node).value
print tree.treePredecessor(node).value
print tree.treeSuccessor(node).value
#print tree.maxTree() , tree.minTree()

 

分享到:
评论

相关推荐

    python实现二叉查找树1

    在Python中,我们可以使用类来表示二叉查找树的节点,并实现插入、查找和删除等操作。例如,创建一个Node类,包含数据、左子节点和右子节点属性。接着,定义一个BST类,包含根节点,以及用于搜索、插入和删除的函数...

    python实现二叉查找树实例代码

    以下是对Python实现二叉查找树的详细解释: 首先,我们需要创建一个表示树节点的类`TreeNode`: ```python class TreeNode: def __init__(self, val): self.val = val self.left = None self.right = None ```...

    二叉查找树python二叉查找树源码

    二叉查找树(Binary Search Tree,BST),也称为二叉排序树,是一种特殊的二叉树数据结构。它的每个节点都包含一个键(key)、一个关联的值、一个指向左子节点的指针和一个指向右子节点的指针。在二叉查找树中,对于...

    python实现二叉搜索树

    python实现二叉搜索树,包含了插入、查找和中序遍历的基本功能。

    Python实现二叉搜索树BST的方法示例

    二叉搜索树(BST,Binary Search Tree),又称为二叉查找树或二叉排序树,是一种特殊的二叉树数据结构,其每个节点的值满足以下条件: 1. 节点的左子树中所有节点的值都小于该节点的值。 2. 节点的右子树中所有节点...

    课程设计——二叉查找树

    如果是源代码,它可能用C++、Java或Python等编程语言编写,展示了二叉查找树的插入、删除和查找等基本操作的算法实现。如果是数据文件,它可能存储了预构建的二叉查找树,用户可以直接在程序中查看和操作这个树。 ...

    Python实现二叉搜索树

    在Python中实现二叉搜索树,通常会定义两个类:`BinarySearchTree`和`TreeNode`。`BinarySearchTree`是整个树的容器,它有一个`TreeNode`类型的根节点,并且包含了一些基本操作,如`__init__`构造函数用于初始化空树...

    循环实现二叉搜索树的查找与插入

    本人用python实现了二叉搜索树的查找(递归与非递归)与插入(递归与非递归)和打印功能,并生成n个随机数插入二叉搜索树当中,中序遍历输出。学习数据结构的同学可以参考一下!!!

    Python实现二叉搜索树的删除功能

    二叉搜索树(二叉查找树,Binary Search Tree)又称为排序二叉树、有序二叉树。 二叉搜索树的实现可以参考:https://blog.csdn.net/weixin_43790276/article/details/105753543 本文使用 Python 实现二叉搜索树的删除...

    二叉查找树

    用python编写的简单二叉查找树,初学者可以借鉴一下

    采用二叉链式结构做存储结构的二叉排序树建立和查找算法

    二叉排序树,又称二叉查找树或二叉搜索树,是一种特殊的二叉树数据结构,它具有以下特性:对于树中的每个节点,其左子树中的所有节点的值都小于该节点的值,而右子树中的所有节点的值都大于该节点的值。这种性质使得...

    二叉 递归二叉查找算法

    递归二叉查找算法是二叉查找的一种实现方式,它利用了函数的递归调用。在递归版本中,查找过程被封装在一个函数中,该函数接受当前节点作为参数,并根据目标值与当前节点值的关系决定下一步的动作。递归版本通常更...

    二叉搜索树的插入删除_二叉搜索树_python_

    在Python中,我们可以用类来实现二叉搜索树。下面我们将详细介绍如何在Python中创建一个二叉搜索树,并实现插入和删除操作。 首先,我们定义一个Node类,用于表示二叉搜索树的节点: ```python class Node: def _...

    Python实现查找二叉搜索树第k大的节点功能示例

    本文实例讲述了Python实现查找二叉搜索树第k大的节点功能。分享给大家供大家参考,具体如下: 题目描述 给定一个二叉搜索树,找出其中第k大的节点 就是一个中序遍历的过程,不需要额外的数组,便利到节点之后,k减...

    剑指Offer(Python多种思路实现):二叉搜索树的第K大节点

    在二叉搜索树(Binary Search Tree,BST)中,第K大节点是指按照节点值排序后,位于第K位置的节点。二叉搜索树是一种特殊的二叉树,其每个节点的左子树上的所有节点的值都小于该节点的值,而右子树上的所有节点的值...

    python 数据结构 算法 LeetCode 牛客 面试 编程之美 动态规划 字典树 快速排序 树 字符串 数组 链表 全排列

    树 * 字典树 ...* 二叉查找树-从有序数组中构造二叉查找树 * 二叉查找树-从有序链表构造平衡的二叉查找树 * 二叉树-的最大深度 数组&字符串 查找排序 排列组合 动态规划 树 链表 数学 位运算 编程之美

    Python 树表查找_千树万树梨花开,忽如一夜春风来(二叉排序树、平衡二叉树).doc

    总结起来,树表查询是一种利用树数据结构进行高效查找的方法,二叉排序树和平衡二叉树是其中重要的实现方式。它们在动态查找、插入和删除操作中展现出良好的性能,并在实际应用中广泛使用,特别是在数据库索引和搜索...

Global site tag (gtag.js) - Google Analytics