zoukankan      html  css  js  c++  java
  • python 二叉排序树

    class BSTNode:
    
        def __init__(self, data, left=None, right=None):
      
            self.data = data
            self.left = left
            self.right = right
     
     
    class BinarySortTree:
      
        def __init__(self):
            self._root = None
     
        def is_empty(self):
            return self._root is None
     
        def search(self, key):
          
            bt = self._root
            while bt:
                entry = bt.data
                if key < entry:
                    bt = bt.left
                elif key > entry:
                    bt = bt.right
                else:
                    return entry
            return None
     
        def insert(self, key):
        
            bt = self._root
            if not bt:
                self._root = BSTNode(key)
                return
            while True:
                entry = bt.data
                if key < entry:
                    if bt.left is None:
                        bt.left = BSTNode(key)
                        return
                    bt = bt.left
                elif key > entry:
                    if bt.right is None:
                        bt.right = BSTNode(key)
                        return
                    bt = bt.right
                else:
                    bt.data = key
                    return
     
        def delete(self, key):
         
            p, q = None, self._root   
            if not q:
                print("empty tree")
                return
            while q and q.data != key:
                p = q
                if key < q.data:
                    q = q.left
                else:
                    q = q.right
                if not q:             
                    return
        
            if not q.left:
                if p is None:
                    self._root = q.right
                elif q is p.left:
                    p.left = q.right
                else:
                    p.right = q.right
                return
    
            r = q.left
            while r.right:
                r = r.right
            r.right = q.right
            if p is None:
                self._root = q.left
            elif p.left is q:
                p.left = q.left
            else:
                p.right = q.left
     
        def __iter__(self):
      
            stack = []
            node = self._root
            while node or stack:
                while node:
                    stack.append(node)
                    node = node.left
                node = stack.pop()
                yield node.data
                node = node.right
     
     
    
    lis = [62, 58, 88, 48, 73, 99, 35, 51, 93, 29, 37, 49, 56, 36, 50]
    bs_tree = BinarySortTree()
    for i in range(len(lis)):
    	bs_tree.insert(lis[i])
    # bs_tree.insert(100)
    bs_tree.delete(58)
    for i in bs_tree:
    	print(i, end=" ")
    # print("
    ", bs_tree.search(4))
    

      

  • 相关阅读:
    软件工程基础
    第一个微信小项目
    数据库实践
    爬虫
    模拟体育竞技
    自己的第一个网页
    科学计算和可视化
    结队项目
    自动生成小学四则运算
    自动生成小学四则运算
  • 原文地址:https://www.cnblogs.com/sea-stream/p/9689120.html
Copyright © 2011-2022 走看看