二叉查找树 算法导论笔记
来源:互联网 发布:淘宝刷单处罚 编辑:程序博客网 时间:2024/06/05 00:56
---------概念和定理---------
二叉查找树的属性:对于一个二叉查找树t而言,其根结点root的key值比所有的左子树都小,比所有的右子树都大。(包括“等于"的情况)
定理1:设x为一个n个结节点的二叉搜索树的根,调用INORDER-TREE-WALK(x)中序遍历的时间复杂度为@(n)。
定理2:二叉查找树上的下述操作时间复杂度均为O(h),h为树的高度:查询、最小值、最大值、后继、前驱。
定理3:二叉查找树上的插入和删除的时间复杂度也为O(h),h为树的高度。
源代码如下:
#include <iostream>using namespace std;typedef int DataType;typedef struct BSTreeNode{DataType data;BSTreeNode * left, * right;BSTreeNode * pnt;}BSTreeNode, *BSTree;void InorderTreeWalk(BSTree t){if(t!=NULL) //终止的条件为,到达空的指针 {InorderTreeWalk(t->left);cout<<t->data;InorderTreeWalk(t->right);}}BSTree TreeSearch(BSTree t,DataType data){if(t==NULL||t->data == data)return t;else if (t->data > data)return TreeSearch(t->right, data);elsereturn TreeSearch(t->left, data);} BSTree IterativeTreeSearch(BSTree t,DataType data){if(t==NULL||t->data == data)return t;else if (t->data<data)t = t->left;elset = t->right;}BSTree TreeMinimum(BSTree t){while(t->left!=NULL)t = t->left;return t;}BSTree TreeMaximum(BSTree t){while(t->right = NULL) t = t->right;return t;}BSTree TreeSuccessor(BSTree t){BSTree f;if(t->right!=NULL)return TreeMinimum(t->right);f = t->pnt;while(f!=NULL&&t==f->right){t = f;f = f->pnt;} return f;}BSTree TreePredecessor(BSTree t){BSTree f;if(t->left!=NULL)return TreeMaximum(t->left);f = t->pnt;while(f!=NULL&&t == f->left){t = f;f = f->pnt;}return f;}void TreeInsert(BSTree &t, BSTree z){BSTree f=NULL; // 父结点 BSTree x = t;while(x!=NULL){f=x;if(z->data<x->data)x=x->left;elsex=x->right;}z->pnt = f;if(f==NULL)t = z; else if (z->data<f->data)f->left = z;else f->right = z;}void Transplant(BSTree t, BSTree u, BSTree v){if(u->pnt==NULL)t = v;else if(u==u->pnt->left){u->pnt->left= v;} elseu->pnt->right= v;if(v!=NULL)v->pnt = u->pnt;}void TreeDelete(BSTree t,BSTree z){BSTree y;if(z->left==NULL)Transplant(t,z,z->right);else if(z->right==NULL)Transplant(t,z,z->left);else {y = TreeMinimum(z->right);if (y->pnt == z)Transplant(t,y,y->right);y->right = z->right;y->right->pnt= y;Transplant(t,z,y);y->left = z->left;y->left->pnt= y;}}int main(){return 0;}
- 二叉查找树 算法导论笔记
- 算法导论 二叉查找树
- 算法导论学习笔记——二叉查找树
- 《算法导论》学习笔记--第十二章 二叉查找树
- 算法导论学习笔记(八):二叉查找树
- 《算法导论》笔记 第12章 12.1 二叉查找树
- 最优二叉查找树详解(算法导论学习笔记)
- 算法导论第十二章:二叉查找树
- 算法导论P151 二叉查找树
- 算法导论(八)二叉查找树
- 算法导论 最优二叉查找树
- 二叉查找树 (算法导论12)
- 最优二叉查找树 算法导论216
- 算法导论15.5 最优二叉查找树
- 二叉查找树(来自算法导论)
- 算法导论——二叉查找树
- 算法导论--二叉查找树--C++实现
- 学习《算法导论》 二叉查找树 总结
- adb上使用cp命令的替代方法(failed on '***' - Cross-device link解决方法)
- 螺旋方阵
- ajax文件上传无刷新处理
- Twitter舍弃“50+”计数器 将显示精确的转发和收藏数
- 解决asm.jar包的冲突
- 二叉查找树 算法导论笔记
- 2012年6月18日技术总结(由于初参与工作,很多地方的解决方案仍需完善,记录一些简单的问题)
- 日期操作
- Adobe Flash 不能调试
- 你只管负责精彩,老天自有安排
- 设置Linux的mailx收发邮件
- 黑马程序员_Sql学习总结(一)
- Table 'table_name' is marked as crashed and should be repaired
- 黑马程序员_Sql学习总结(二)