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)

  

原文地址:https://www.cnblogs.com/c-x-a/p/11065991.html

时间: 2024-11-08 21:00:28

python 二叉搜索树相关代码的相关文章

二叉搜索树 C++代码实现

暂未发现什么bug,如果发现请指出. #include<iostream> using namespace std; //定义二叉搜索树的结点 struct Node { int data; Node *lc,*rc,*parent; }; //中序遍历二叉搜索树 void show(Node *now) { if(now==NULL) return; show(now->lc); cout<<now->data<<endl; show(now->rc

二叉搜索树(Binary Search Tree)--C语言描述(转)

图解二叉搜索树概念 二叉树呢,其实就是链表的一个二维形式,而二叉搜索树,就是一种特殊的二叉树,这种二叉树有个特点:对任意节点而言,左孩子(当然了,存在的话)的值总是小于本身,而右孩子(存在的话)的值总是大于本身. 下面来介绍在此种二叉树结构上的查找,插入,删除算法思路. 查找:因为这种结构就是为了来方便查找的,所以查找其中的某个值很容易,从根开始,小的往左找,大的往右找,不大不小的就是这个节点了: 代码很简单,这里就不写了. 插入:插入一样的道理,从根开始,小的往左,大的往右,直到叶子,就插入.

二叉搜索树(Binary Search Tree)--C语言描述

一:硬着头皮就是上 数据结构中有个东西一直不愿意去面对,就是二叉搜索树,以及平衡二叉树.想想就耗脑细胞 马上开学了,就要学C++了,还有其他的事,估计更没有时间搞数据结构了,于是狠下心,把二叉搜索树和平衡二叉树给拿下!! 啊啊啊啊,算法很枯燥无聊,不过搞明白了收获多多,不过目前好像没有什么用. 反正安慰自己,这都是内功,修炼好了,以后放大招威力无比啊,嘿嘿. 二:图解二叉搜索树概念 二叉树呢,其实就是链表的一个二维形式,而二叉搜索树,就是一种特殊的二叉树,这种二叉树有个特点:对任意节点而言,左孩

【LeetCode-面试算法经典-Java实现】【098-Validate Binary Search Tree(验证二叉搜索树)】

[098-Validate Binary Search Tree(验证二叉搜索树)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as follows: The left subtree of a node contains only nodes with keys le

二叉搜索树基本操作实现

二叉搜索树又称为二叉排序树,首先二叉搜索树是一棵二叉树,所谓二叉树,就是"任意节点最多允许两个子节点",这两个子节点称为左右子节点. 二叉搜索树的性质: 1.若左子树不空,则左子树上的所有节点的值均小于其根节点的值: 2.若右子树不空,则右子树上的所有节点的值均大于其根节点的值: 上图便是一个二叉搜索树,也就是说:任意节点的键值一定大于其左子树中的每一个节点的键值,并小于其右子树中的每一个节点的键值. 下面是自己对二叉搜索树的代码实现: #include <iostream>

二叉搜索树(BST)---python实现

github:代码实现 本文算法均使用python3实现 1. 二叉搜索树定义 ??二叉搜索树(Binary Search Tree),又名二叉排序树(Binary Sort Tree). ??二叉搜索树是具有有以下性质的二叉树: ??(1)若左子树不为空,则左子树上所有节点的值均小于或等于它的根节点的值. ??(2)若右子树不为空,则右子树上所有节点的值均大于或等于它的根节点的值. ??(3)左.右子树也分别为二叉搜索树. 2. 二叉搜索树的相关操作 2.1 插入操作 ??从根节点开始,若插入

小白专场-是否同一颗二叉搜索树-python语言实现

目录 一.二叉搜索树的相同判断 二.问题引入 三.举例分析 四.方法探讨 4.1 中序遍历 4.2 层序遍历 4.3 先序遍历 4.4 后序遍历 五.总结 六.代码实现 更新.更全的<数据结构与算法>的更新网站,更有python.go.人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11407287.html 一.二叉搜索树的相同判断 二叉搜索树是一种特殊的二叉树,在一定程度上是基于二分查找思想产生的,在它的任何一个节点node处,node的左子

二叉搜索树的相关操作

操作包括二叉搜索树的创建,插入,搜索,寻找前驱后继,删除,左右旋转,插入元素为根结点,以及两棵二叉树的合并. 二叉树的创建很简单,只需要设置 value, left child, right child 即可. 插入的时候递归插入树中合适的位置,通过比较插入元素的值与根结点元素的值,如果小于则递归插入到左子树中,否则递归插入到右子树中. 搜索的时候与插入类似,比较要搜索的值和根结点元素值的大小,若小于则递归到左子树中去查找,否则递归到右子树中去查找. 寻找前驱的方式是在左子树的右结点中去递归寻找

编程算法 - 二叉搜索树(binary search tree) 代码(C)

二叉搜索树(binary search tree) 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 二叉搜索树(binary search tree)能够高效的进行插入, 查询, 删除某个元素, 时间复杂度O(logn). 简单的实现方法例如以下. 代码: /* * main.cpp * * Created on: 2014.7.20 * Author: spike */ /*eclipse cdt, gcc 4.8.1*/ #include <s