python BST

原创 2015年07月11日 10:26:33

http://blog.csdn.net/l153097889/article/details/46774725

#-------------------------------------------------------------------------------
# Name:        BinarySearchTree
# Purpose:     非平衡二叉搜索树
#
# Author:      M.E.Liu
#
# Created:     12/07/2015
# Copyright:   (c) M.E.Liu 2015
# Licence:     <Artificial Intelligence Lab of HUST>
#-------------------------------------------------------------------------------

import BinaryTree as BTree

class BinarySearchTree(BTree.BinaryTree):
    def __init__(self,root=0,count=0,height=0):
        BTree.BinaryTree.__init__(self,root,count,height)

    def insertNode(self,treenode):
        if treenode==0:
            return
        if self.root==0:
            self.root = treenode
            return
        self.count += 1
        currentNode = self.root
        while currentNode :
            if currentNode.data<treenode.data:
                if currentNode.right==0:
                    currentNode.right = treenode
                    return
                else:
                    currentNode = currentNode.right
            elif currentNode.data>treenode.data:
                if currentNode.left==0:
                    currentNode.left = treenode
                    return
                else:
                    currentNode = currentNode.left

    def delNode(self,currentnode,data):
        if not currentnode.left and not currentnode.right:
            currentnode.data = None
            return 'leaf'
        if currentnode.data is data:
            if currentnode.left and currentnode.right:
                rightnode = currentnode.right
                rightparent = rightnode
                while rightnode.left:
                    rightparent = rightnode
                    rightnode = rightnode.left
                currentnode.data = rightnode.data
                if self.delNode(rightnode,rightnode.data) is 'leaf':
                    rightparent.left = None
                return 'node'
            else:
                direction = 0 if currentnode.left else 1
                node = currentnode[direction]
                currentnode.data = node.data
                if self.delNode(node,node.data) is 'leaf':
                    currentnode[direction] = None
                return 'node'
        else:
            parent = currentnode
            direction = 0 if currentnode.data > data else 1
            currentnode = parent[direction]
            if self.delNode(currentnode,data) is 'leaf':
                parent[direction] = None


def main():
    n8 = BTree.BinaryTreeNode(8,0,0)
    n6 = BTree.BinaryTreeNode(6,0,0)
    n15 = BTree.BinaryTreeNode(15,0,0)
    n13 = BTree.BinaryTreeNode(13,0,0)
    n11 = BTree.BinaryTreeNode(11,0,0)
    n9 = BTree.BinaryTreeNode(9,0,0)
    n5 = BTree.BinaryTreeNode(5,0,0)
    n3 = BTree.BinaryTreeNode(3,0,0)
    n1 = BTree.BinaryTreeNode(1,0,0)

    n7 = BTree.BinaryTreeNode(7,n5,n8)
    n14 = BTree.BinaryTreeNode(14,n13,n15)
    n10 = BTree.BinaryTreeNode(10,0,n11)
    n12 = BTree.BinaryTreeNode(12,n10,n14)


    n2 = BTree.BinaryTreeNode(2,n1,n3)
    n4 = BTree.BinaryTreeNode(4,n2,n7)
    n9 = BTree.BinaryTreeNode(9,n4,n12)

    root = n9
    bt = BinarySearchTree(root)
    bt.insertNode(n6)

    bt.delNode(root,12)
    bt.delNode(root,9)
    bt.midOrder(bt.root)



##    bt = BinarySearchTree()
##    for i in range(1,16):
##        exec("n"+str(i)+" = BTree.BinaryTreeNode("+str(i)+",0,0)")
##        exec("bt.insertNode(n"+str(i)+")")
##    bt.delNode(4)
##    bt.delNode(5)
##    bt.delNode(6)
##    bt.preOrder(bt.root)

if __name__ == '__main__':
    main()


二叉查找树python实现

1. 二叉查找树的定义: 左子树不为空的时候,左子树的结点值小于根节点,右子树不为空时,右子树的结点值大于根节点,左右子树分别为二叉查找树 2. 二叉查找树的最左边的结点即为最小值,要查找最小值,只需...
  • u011608357
  • u011608357
  • 2014年06月29日 14:05
  • 1753

二叉查找树BST总结

二叉查找树BST总结分析 1.ADT(抽象数据类型) ADT BST {          数据元素:数据节点(键值,位置信息) 数据关系:父子关系 基本操作: 插入节点 查找节点 ...
  • ltyqljhwcm
  • ltyqljhwcm
  • 2016年07月31日 22:59
  • 1944

python BST

http://blog.csdn.net/l153097889/article/details/46774725 #-----------------------------------------...
  • l153097889
  • l153097889
  • 2015年07月11日 10:26
  • 638

python BST

http://blog.csdn.net/l153097889/article/details/46774725 #-----------------------------------------...
  • l153097889
  • l153097889
  • 2015年07月11日 10:26
  • 638

[leetcode] 285. Inorder Successor in BST 解题报告

题目链接: https://leetcode.com/problems/inorder-successor-in-bst/ Given a binary search tree and a nod...
  • qq508618087
  • qq508618087
  • 2016年03月14日 14:39
  • 2020

LeetCode 285. Inorder Successor in BST

原题网址:https://leetcode.com/problems/inorder-successor-in-bst/ Given a binary search tree and a node...
  • jmspan
  • jmspan
  • 2016年04月15日 00:35
  • 498

python︱大规模数据存储与读取、并行计算:Dask库简述

数据结构与pandas非常相似,比较容易理解。 原文文档:http://dask.pydata.org/en/latest/index.html github:https://github.com/d...
  • sinat_26917383
  • sinat_26917383
  • 2017年09月20日 19:22
  • 1148

BST判断

下面这种风格是最好的实现方式 public boolean isValid(Node root) { return isValidBST(root, Integer.MIN_VALUE, ...
  • u014174955
  • u014174955
  • 2016年03月14日 19:03
  • 129

bst三种遍历及其他

#include #include //using stack; using namespace std; struct Node { int data; Node *left; Node...
  • fall221
  • fall221
  • 2013年09月10日 13:53
  • 1179

Leetcode-530. Minimum Absolute Difference in BST

前言:为了后续的实习面试,开始疯狂刷题,非常欢迎志同道合的朋友一起交流。因为时间比较紧张,目前的规划是先过一遍,写出能想到的最优算法,第二遍再考虑最优或者较优的方法。如有错误欢迎指正。博主首发CSDN...
  • mcf171
  • mcf171
  • 2017年02月26日 13:38
  • 527
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python BST
举报原因:
原因补充:

(最多只允许输入30个字)