搜索二叉树的定义及操作
来源:互联网 发布:mysql 传入动态参数 编辑:程序博客网 时间:2024/06/07 03:04
一.定义:
二叉搜索树是满足以下性质的二叉树。
1.非空左子树的所有键值小于其根结点的键值;
2.非空右子树的所有键值大于其根结点的键值;
3.左右子树都是二叉树。
二.二叉搜索树的储存:
二叉搜索树的储存和普通二叉树的储存一样,一般用链表储存。
三.二叉搜索树的查找:
1.查找关键字为X的结点,返回其所在的地址:
将X值与结点值做对比,如果相等那么这个数找到,如果小于应该再递归在左子树上找,如果大于应该再递归在右子树上找,如果递归到所有结点为空,那么停止查找。
BinTree Find(int x, BinTree BST){ if(!BST) return NULL; //没找到 if(x > BTS->Data) return Find(x,BST->Right); else if(x < BTS->Data) return Find(x,BST->Left); else return BST; //找到,返回地址}
2.查找二叉搜索树的最大和最小元素
最大元素和最小元素分别在最右端点和最左端点。
不断往左(右)递归,找到最左(右)端点即可。
最小元素:
BinTree FindMin(BinTree BST){ if(!BST) return NULL; //空树 if(!BST->Left) return BST; else return FindMin(BST->Left);}
BinTree FindMin(BinTree BST){ if(BST) { while(BST->Left) BST = BST->Left; } return BST;}
最大元素是把Left改成Right;
四.二叉搜索树的插入和删除
1.插入操作:将元素X插入二叉搜索树关键找到元素应该插入的位置。
将X值与结点值做对比,如果相等那么这个数已经存在,如果小于应该再递归在左子树上找,如果大于应该再递归在右子树上找,如果找到结点为空,那么将结点赋值。
BinTree Insert( BinTree BST, ElementType X ){ if(!BST) { BST = (BinTree)malloc(sizeof(struct TNode)); BST->Data = X; BST->Left = BST->Right = NULL; } else { if(X < BST->Data) BST->Left = Insert(BST->Left,X); else if(X > BST->Data) BST->Right = Insert(BST->Right,X); } return BST;}
2.删除操作:
如果没找到不处理,如果查找到那个点,继续操作:如果左右子树都非空,那么查找左子树的最大值(右子树的最小值)代替这个删去的位置,并再删去这个我们用来代替的数的原来位置;如果只有左子树(右子树)非空,那么用左子树(右子树)的根代替,如果本身就是叶子结点那么删去即可。
BinTree Delete( BinTree BST, ElementType X ){ BinTree Tmp; if(!BST) { puts("Not Found"); return NULL; } else { if(X < BST->Data) BST->Left = Delete(BST->Left,X); else if(X > BST->Data) BST->Right = Delete(BST->Right,X); else { if(BST->Right && BST->Left) { Tmp = FindMin(BST->Right); //Tmp = FindMax(BST->Left); BST->Data = Tmp->Data; BST->Right = Delete(BST->Right,Tmp->Data); //BST->Left = Delete(BST->Left,Tmp->Data); } else { if(!BST -> Left) BST = BST->Right; else if(!BST -> Right) BST = BST->Left; } } } return BST;}
0 0
- 搜索二叉树的定义及操作
- 二叉树的定义及基本操作
- 搜索二叉树的操作
- 二叉搜索树的操作
- 二叉搜索树的操作
- 二叉搜索树的操作
- 【二叉搜索树】二叉搜索树的基本操作
- 二叉搜索树(Binary Search Tree )的定义及分析
- 二叉搜索树操作
- 二叉树的定义与基本操作
- 二叉搜索树(BST)的基本操作
- 二叉搜索树的一些基本操作
- 二叉搜索树的性质与操作
- 数据结构 二叉搜索树的相关操作
- 搜索二叉树的相关操作
- 二叉搜索树的基本操作
- 【数据结构】搜索二叉树的相关操作
- c++搜索二叉树的基本操作
- 线程的一些逻辑性题目
- JEM亮度QP和lambda的计算
- 适配器模式(adapter)
- Web应用程序状态管理
- leetcode(89).405. Convert a Number to Hexadecimal
- 搜索二叉树的定义及操作
- 润乾实现父页面传参到iframe嵌套的报表
- codeforces 185A. Plant 矩阵快速幂
- IAR中创建stm8s 工程时assert_failed函数引发的错误
- c语言编程实现字符串向整数的转换(剑指offer)
- java小项目--五子棋
- 代码审查-第二天:代码风格审查工具cpplint的使用
- C++实现栈和队列
- 对象作用域与Servlet事件监听器