zoukankan      html  css  js  c++  java
  • python 二叉搜索树相关代码

    class TreeNode:
        def __init__(self, val):
            self.val = val
            self.left = None
            self.right = None
    
    
    class OperationTree:
        def insert(self, root, val):
            if root is None:
                root = TreeNode(val)
    
            elif val < root.val:
                root.left = self.insert(root.left, val)
            elif val > root.val:
                root.right = self.insert(root.right, val)
            return root
    
        def printTree(self, root):
            if root is None:
                return
            self.printTree(root.left)
            print(root.val, end=' ')
            self.printTree(root.right)
    
        def query(self, root):
            if root is None:
                return
            if val == root.val:
                return True
            elif val < root.val:
                self.query(root.left)
            elif val > root.right:
                self.query(root.right)
    
        def find_min(self, root):
            if root.left:
                return self.find_min(root.left)
            else:
                return root
    
        def find_max(self, root):
            if root.right:
                return self.find_max(root.right)
            else:
                return root
    
        def del_node(self, root, val):
            if root is None:
                return
            if val < root.val:
                root.left = self.del_node(root.left, val)
            elif val > root.val:
                root.right = self.del_node(root.right, val)
            # 当val == root.val时,分为三种情况:只有左子树或者只有右子树、有左右子树、即无左子树又无右子树
            else:
                if root.left and root.right:
                    # 既有左子树又有右子树,则需找到右子树中最小值节点
                    temp = self.find_min(root.right)
                    root.val = temp.val
                    # 再把右子树中最小值节点删除,让它符合二叉搜索树的定义
                    root.right = self.del_node(root.right, temp.val)
                elif root.right is None and root.left is None:
                    # 左右子树都为空
                    root = None
                elif root.right is None:
                    # 只有左子树
                    root = root.left
                elif root.left is None:
                    # 只有右子树
                    root = root.right
            return root
    
    
    if __name__ == '__main__':
        List = [17, 5, 35, 2, 11, 29, 38, 9, 16, 8]
        root = None
        op = OperationTree()
        for val in List:
            root = op.insert(root, val)
        print('中序打印二叉搜索树:', end=' ')
        op.printTree(root)
    

      

  • 相关阅读:
    【操作系统】第九章 虚拟内存
    【计网】第七章
    信息安全数学基础整理笔记
    深入浅出数据分析 笔记总结
    ERROR: Error cloning remote repo 'origin'
    Docker 操作
    centos 安装 git
    CentOS 7 安装 JAVA环境(JDK 1.8)
    如何删除 容器里的软件(彻底)
    Docker 部署 Jenkins :通过SSH配置Linux宿主机为slave节点,运行外部环境
  • 原文地址:https://www.cnblogs.com/c-x-a/p/11065991.html
Copyright © 2011-2022 走看看