【模板】二叉搜索树(二叉排序树,二叉查找树,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;
13     }
14     else
15     {
16         if(rt[x] ^ -1) Insert(rt[x], obj);
17         else rt[x] = obj;
18     }
19     return;
20 }
21
22 int Find(int x, int obj) // 寻找obj这个值在树中的位置
23 {
24     if(obj < a[x])
25     {
26         if(lt[x] ^ -1) return Find(lt[x], obj);
27         else return -1; // Not found
28     }
29     if(obj > a[x])
30     {
31         if(rt[x] ^ -1) return Find(rt[x], obj);
32         else return -1; // Not found
33     }
34     return x;
35 }

原文地址:https://www.cnblogs.com/kcn999/p/10015352.html

时间: 2024-10-18 12:04:01

【模板】二叉搜索树(二叉排序树,二叉查找树,BST)的相关文章

【算法设计-二叉搜索树】二叉查找树的操作与实现

二叉查找树某个结点的左子树的值都比它小,其右子树的值比它大. 要实现的主要操作 代码实现 #include <iostream> using namespace std; // BST的结点 typedef struct node { int key; struct node *lChild, *rChild,*parent; }Node, *BST; BST lvis=NULL;//用来保存父节点的地址 void createBST(BST &p); void assignmentP

[模板]二叉搜索树

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

数据结构学习笔记04树(二叉树、二叉搜索树、平衡二叉树)

一.树 树的基本术语 ①结点的度(Degree):结点的子树个数 ②树的度:树的所有结点中最大的度数 ③叶结点(Leaf):度为0的结点 ④父结点(Parent):有子树的结点是其子树的根结点的父结点 ⑤子结点(Child):若A结点是B结点的父结点,则称B结点是A结点的子结点:子结点也称孩子结点. ⑥兄弟结点(Sibling):具有同一父结点的各结点彼此是兄弟结点. ⑦路径和路径长度:从结点n1到nk的路径为一个结点序列n1 , n2 ,… , nk , ni是 ni+1的父结点.路径所包含边

[剑指offer] 判断二叉搜索树的后序遍历序列

题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 输入描述 整数数组 输出描述 布尔值 题目分析 什么是二叉搜索树? 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值: 它的左.右子树也分别为二

【数据结构05】红-黑树基础----二叉搜索树(Binary Search Tree)

目录 1.二分法引言 2.二叉搜索树定义 3.二叉搜索树的CRUD 4.二叉搜索树的两种极端情况 5.二叉搜索树总结 前言 在[算法04]树与二叉树中,已经介绍过了关于树的一些基本概念以及二叉树的前中后序遍历,而这篇文章将是在二叉树的基础上来展开讲解的二叉搜索树,也就是说二叉搜索树建立在树的基础之上.至于博主为何要花一整篇文章来讲这个二叉搜索树呢?原因很简单,红-黑树是基于二叉搜索树的,如果对二叉搜索树不了解,那还谈何红-黑树?红-黑树的重要性我想各位没吃过佩奇肉也肯定看过宜春跑....是的,j

数据结构 ---- 二叉搜索树

一直对于二叉搜索树(又叫二叉排序树,也叫二叉查找树),没有很好的理解,决定花点时间来学习and总结.. 二叉搜索树也是二叉树的一种.(就像堆也就二叉树的一种一样...) 只不过,二叉搜索树也是有其他要求:对于所有的子树,其根节点的值大于左子树上的所有结点的值,而小于右子树上所有结点的值的值.. 对于错误的理解:对于所有的结点,要大于其左结点,小于其右结点..(PS:这种理解是错误的,一定要注意..) 还有一点需要注意的是:我们的大于和小于都应该是严格的. ========== 下面主要针对,其建

数据结构与算法之二叉搜索树

与链表不同,树是一种非线性的数据结构.树中最常用的是二叉树,二叉树限制了子树的数量,也就是每个结点的子树至多2个,并且这两个子树是有顺序的.而二叉搜索树(二叉查找树,二叉排序树)是指根节点的关键字大于左子树的,而小于右子树,并且,左右子树也是一颗二叉搜索树.也就是说中序遍历一颗二叉搜索树,它的输出是从小到大排序好的. 除了普通的二叉搜索树之外,还有很多关于它的变形. 二叉平衡搜索树,即即是一颗二叉平衡树,也是一颗搜索树,平衡树即任意一个结点的左子树的高度与右子树的高度之差的绝对值不大于1. 红黑

二叉搜索树的后序遍历序列验证

[题目]输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是,返回true,否则输出false.假设输入的数组的任意两个数字都互不相同. [思路]首先我们得知道什么是二叉搜索树,二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值: 它的左.右子树也分别为二叉排序树.由这个性质我

漫谈二叉搜索树的基本算法(三种思路实现查询操作)

  前面我们说了二叉树前序中序后序遍历的递归非递归算法的实现,下面我们再来说说二叉搜索树~   二叉排序树分为静态查找(find)和动态查找(insert.delete) 二叉搜索树:一棵二叉树,可以为空:如果不为空,满足下列性质: 1.非空左子树的所有键值小于其根结点的键值. 2.非空右子树的所有键值大于其根结点的键值 3.左右子树都是二叉搜索树!! 2.以上是二叉搜索树(也叫二叉排序树)的一些基本操作,此处我们先说一下二叉树的结点定义·· 代码中判断当前结点位置情况的辅助方法以及简单的 ge