[模板]二叉搜索树

tips:模板是写给自己的,所以大家可能有些看不懂,请移步参观其他dalao的模板。

一、结点构造

struct Node
{
    int data,lson,rson;
}A[N];

二、插入insert

void insert(int w_pos,int pos)
{
    if(A[w_pos].data<A[pos].data){
        if(!A[pos].lson)A[pos].lson=w_pos;
        else insert(w_pos,A[pos].lson);
    }
    else{
        if(!A[pos].rson)A[pos].rson=w_pos;
        else insert(w_pos,A[pos].rson);
    }
    return;
}

三、查找find

查找最小数

int find(int pos)
{
    if(!A[pos].lson)return pos;
    find(A[pos].lson);
}

查找最大数

int find(int pos)
{
    if(!A[pos].rson)return pos;
    return find(A[pos].rson);
}

四、删除clear

我不会呀啊啊啊啊啊,所以还没写耶,以后有时间会补的。——2018.11.28

原文地址:https://www.cnblogs.com/lihepei/p/10031715.html

时间: 2024-11-06 07:07:19

[模板]二叉搜索树的相关文章

【模板】二叉搜索树

二叉搜索树:对于二叉树中的任意节点,左子树中所有的值都小于当前位置的值,右子树中所有的值都大于当前位置的值. 操作: 1.插入一个数值. 2.查询是否包含某个数值. 3.删除某个数值. 插入和查找是差不多的,都是比当前值(要找的值)大就往左走,否则就往右走,直到找到为止. 最复杂的操作是删除某个节点,不过可以分为3种情况来讨论: 1.需要删除的节点没有左子树,那就把右子树提上去. 2.需要删除的节点的左子树没有右子树,那就把左子树提上去. 3.其他情况,把左子树中最大的节点提到当前删除的节点的位

【模板】二叉搜索树(二叉排序树,二叉查找树,BST)

二叉搜索树其实就是满足左结点小于根,右结点大于根这类规则的树形结构. 1 int n; 2 int a[MAX_N]; 3 int lt[MAX_N], rt[MAX_N]; 4 // 没有则为-1 5 // 默认a[0]为根结点 6 7 void Insert(int x, int obj) // 插入结点a[obj] 8 { 9 if(a[obj] < a[x]) 10 { 11 if(lt[x] ^ -1) Insert(lt[x], obj); 12 else lt[x] = obj;

ACM-数据结构-二叉搜索树(C++实现)

近日研习<计算机算法>,一点点弄明白了二叉搜索树. /* @header BSTree @abstract BSTree @discussion Insert,delete,search and order @author WalterBright,2016 */ #include <iostream> using namespace std; template <class Type> class BSTree; //模板类作为友元类需提前声明 template &l

数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树

在上一篇数据结构的博文<数据结构(三):非线性逻辑结构-二叉树>中已经对二叉树的概念.遍历等基本的概念和操作进行了介绍.本篇博文主要介绍几个特殊的二叉树,堆.哈夫曼树.二叉搜索树.平衡二叉搜索树.红黑树.线索二叉树,它们在解决实际问题中有着非常重要的应用.本文主要从概念和一些基本操作上进行分类和总结. 一.概念总揽 (1) 堆 堆(heap order)是一种特殊的表,如果将它看做是一颗完全二叉树的层次序列,那么它具有如下的性质:每个节点的值都不大于其孩子的值,或每个节点的值都不小于其孩子的值

用JS实现二叉搜索树

二叉树的节点最多只能有两个子节点,一个左侧子节点,一个右侧子节点. 二叉搜索树(BST),是二叉树的一种,但只允许在左侧节点存储比父节点小的值,在右侧节点存储比父节点大或等于父节点的值. 1.创建BST 1.1创建BST类 首先申明BST类的基本结构 function BinarySearchTree() { var Node = function(key){ this.key = key; this.left = null; this.right = null; }; var root = n

538. Convert BST to Greater Tree 二叉搜索树转换为更大树

Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key in BST. Example: Input: The root of a Binary Search Tree like thi

二叉搜索树

#include<stdio.h> #include<iostream> #include<math.h> #include<stdlib.h> using namespace std; struct TreeNode { TreeNode* p; TreeNode* l; TreeNode* r; int key; TreeNode() { p = 0; l = 0; r = 0; key = -1; } }; const int RANDMOD = 30

04-树4 是否同一棵二叉搜索树

给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果.于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树. 输入格式: 输入包含若干组测试数据.每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要检查的序列个数.第2行给出N个以空格分隔的正整数,作为初始插入序列.最后L行,每行给出N个插入的元素,属于

二叉搜索树建立、插入、删除、前继节点、后继节点之c++实现

一.前言 一直以来,都对树有关的东西望而却步.以前每次说要看一看,都因为惰性,时间就那么荒废掉了.今天下个决心,决定好好的数据结构中的东西看一下.不知道看这篇文章的你,是不是和我有同样的感受,空有一颗努力的心,却迟迟没有付出行动.如果是的话,如果也想好好的把树的知识巩固一下的话,就让我们一起好好儿地把知识点过一遍吧.本文争取让看完的每一个没有基础的同学,都能有所收获.在正文开始前,先给自己加个油.加油(^ω^) 二.二叉搜索树的定义 二叉搜索树是指,对于某一个节点而言,它左边的节点都小于或等于它