手写BST插入查找删除
来源:互联网 发布:番茄计时器 windows 编辑:程序博客网 时间:2024/05/09 21:43
binary search\sort\find tree operations
总结指针bug就是 每次访问left right,都要考虑是否p为空,如果有空就另外处理,否则NULL访问left right 程序就crash了。
status InsertNode(Node* root, data x, Node* father){if(root==NULL){if(father==NULL)Tree empty;else{if(x<father->data){father->left=new Node//inital left right NULLfather->left->data=x;return success;}else if(father->data<x){father->right=new Node;//inital left right NULLfather->right->data=x;return succes;}else{return failure, have same data in BST//Hash also not allowed same data, but other such as array allow}}}if(x<root->data) InsertNode(root->left,x); //imitate big god fawks's code style : )else if(root->data<x) InsertNode(root->right,x);elsereturn falure, have same data in BST;}
后来发现,根本不需要father, 会出现上面的原因是我总以为指针为空,指针变量也不能在赋值了。有个错误理解,指针变量是一个变量,他的值为空,现在可以让他指向其他的地方,例如申请一个堆空间,他的值就是这个新的空间的地址值。
status InsertNode(Node* root, data x){if(root==NULL){root=new Node;//assume initial left right NULLroot->data=x;}if(x<root->data) InsertNode(root->left,x); //imitate big god fawks's code : )else if(root->data<x) InsertNode(root->right,x);elsereturn falure, have same data in BST;}
Node* FindNode(Node* root, data x, Node* father)//use father for delete recall{if(root==NULL) return NULL;if(x<root->data) FindNode(root->left, x,root);else if(root0>data<x) FindNode(root->right,x,root);elsereturn root;}
status DeleteNode(Node* root, data x){Node* parent=NULL;Node* p=FindNode(root,x,parent);if(p==NULL)return failure, can not found x;if(parent==NULL)//BST only has a rootreturn success root==NULL;//set BST as NULLif(p==parent->left){if(p-left!=NULL){move p's right child as p's leftchild's rightdownmost node's right child parent->left=p->left;}else if(p->right!=NULL){move p's left child as p's rightchild's leftdownmost node's left child;parent->left=p->right;}else// all null{parent->left==NULL;}delete p;}if(p==parent->right){follow left part;}return sucess;}
总结指针bug就是 每次访问left right,都要考虑是否p为空,如果有空就另外处理,否则NULL访问left right 程序就crash了。
0 0
- 手写BST插入查找删除
- BST的查找、插入、删除
- BST 插入删除查找遍历
- BST的插入、删除、查找操作
- 关于BST的插入,查找和删除
- 二叉搜索树(BST)的创建、插入、查找和删除
- 动态查找表之二叉排序树(BST)的 创建、查找、插入与删除
- 二叉排序树(二叉查找树)BST构造,节点插入,节点查找,节点删除(java)
- BST的插入和删除
- 数据结构基础5.2:二叉搜索树(BST)的基本操作(插入、查找、删除)
- BST 存储结构建立(插入)、删除、 查找算法的实现及应用
- 二叉搜索树(BST)递归与非递归的插入、删除、查找的实现
- BST二叉搜索树的查找,最大小值,删除,插入
- 二叉搜索树(BST)插入与查找
- 二叉查找树(BST)---删除节点
- 二叉排序树查找、插入、删除
- 使用指针数组实现bst插入和查找操作
- 二叉排序树的查找、删除、插入
- maven学习(上)- 基本入门用法
- 运动检测(前景检测)之(一)ViBe
- Linq to SQL与.net MVC
- 第三章作业(二)
- ASP无限分类原理(转载)
- 手写BST插入查找删除
- 阿里IPO承销商瑞信狂赚1.3亿美元
- Android适配不同分辨率——精确适配不同的dpi和屏幕尺寸
- loadrunner性能测试——入门
- tar 压缩打包时排除或忽略某个子目录或文件
- maven与findbugs
- log4j配置
- 3.12 MonoForAndroid用户人机界面--具有交互功能的对话框
- [Xamarin]测试账号申请与到期后如何续用