二叉树------二叉查找树的相关内容
来源:互联网 发布:sql注入分析 编辑:程序博客网 时间:2024/04/30 10:16
- 性质
- 若它的左子树不为空,则左子树上所有的结点值均小于它根结点的值;
- 若它的右子树不为空,则右子树上所有的结点值均大于它根结点的值;
- 它的左、右子树也都是二叉查找树。
- 二叉查找树的相关操作
1.二叉树的二叉链表结点结构定义
typedef struct BiTNode{ int data; struct BiTNode *lchild, *rchild;}BiTNode, *BiTree;
2. 查找操作
/*递归的查找二叉查找树T中是否有key,指针f指向T的父结点,其初始值为NULL。若查找成功,则指针p指向该结点,并返回true。否则,指针p指向查找路径上访问的最后一个结点并返回false */bool searchBST(BiTree T, int key, BiTree f, BiTree *p){ if(!T){ *p = f; return false; } else if(key == T->data){ *p = T; return true; } else if(key < T->data){ return searchBST(T->lchild, key, T, p); } else{ return searchBST(T->rchild, key, T, p); }}
3.插入操作
bool insertBST(BiTree* T, int key){ BiTree p, s; if(!searchBST(*T, key, NULL, &p)){ s = (BiTree)malloc(sizeof(BiTNode)); s->data = key; s->lchild = s->rchild = NULL; if(!p) *T = s; else if(key < p->data) p->lchild = s; else p->rchild = s; return true; } else return false;}
4. 构建一棵二叉查找树
BiTree makeTree(int *arr, int len){ int i; if(arr == NULL || len < 1){ return NULL; } BiTree T = NULL; for(i = 0; i < len; i++){ insertBST(&T, arr[i]); } return T;}
5.二叉查找树的删除
/*分三种情况: 1> 是叶子结点; 2> 仅有左或右子树的结点; 3> 左右子树都有的结点;*/bool deleteBST(BiTree* T, int key){ if(!*T) return false; else{ if(key == (*T)->data) return Delete(T); else if(key < (*T)->data) return deleteBST(&(*T)->lchild, key); else return deleteBST(&(*T)->rchild, key); }}bool Delete(BiTree* p){ BiTree q, s; if((*p)->rchild == NULL){ //若右子树为空,则将左子树放到当前位置,并删除结点 q = *p; *p = (*p)->lchild; //注意此处 free(q); } else if((*p)->lchild == NULL){ q = *p; *p = (*p)->rchild; free(q); } else{ //当左右子树都不为空时,要找到要删除结点的直接前驱,用它来代替要删除结点的位置 q = *p; s = (*p)->lchild; while(s->rchild){ q = s; s = s->rchild; } (*p)->data = s->data; //直接前驱就是要删除结点的左子树的最右边结点 if(q != *p) q->rchild = s->lchild; else q->lchild = s->lchild; free(s); } return true;}
1 0
- 二叉树------二叉查找树的相关内容
- 二叉树的查找
- 二叉树的查找
- 二叉查找树的
- 查找--二叉查找树
- 二叉树、二叉查找树
- 二叉树 & 二叉查找树
- 二叉查找树的建立
- 二叉查找树的操作
- 二叉查找树的应用
- 二叉查找树的后继
- 二叉查找树的实现
- 7.6 二叉树的查找
- 二叉查找树的实现
- 二叉树的查找设计
- 二叉查找树的实现
- 二叉查找树的实现
- 二叉查找树的操作
- C++ STL set和multiset的使用
- jQuery 之 用折线图、饼图、柱状图、仪表盘 展现数据
- QS Network-ZOJ1586
- linux上ln命令详细说明
- 如何在魔镜中定位并获取一个物体信息
- 二叉树------二叉查找树的相关内容
- Redis存储Java对象
- 守护线程
- AndroidAnnotations介绍
- 柳永词
- iOS软件逆向思维
- RecyclerView中的多种布局
- SVN使用教程总结
- 获得tableview中可见的cells