文章标题
2015-08-22 16:22
239 查看
二叉查找树实现
性质
二叉查找树(BinarySearch Tree,也叫二叉搜索树,或称二叉排序树Binary Sort Tree)或者是一棵空树,或者是具有下列性质的二叉树:(1)、若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值; (2)、若它的右子树不为空,则右子树上所有结点的值均大于它的根结点的值; (3)、它的左、右子树也分别为二叉查找树
插入
在二叉查找树中插入新结点,要保证插入新结点后仍能满足二叉查找树的性质。例子中的插入过程如下: a、若二叉查找树root为空,则使新结点为根; b、若二叉查找树root不为空,则通过Insert函数寻找插入点并返回它的地址(若新结点中的关键字已经存在,则返回空指针); c、若新结点的关键字小于插入点的关键字,则将新结点插入到插入点的左子树中,大于则插入到插入点的右子树中。
删除
删除某个结点后依然要保持二叉查找树的特性。例子中的删除过程如下: a、若删除点是叶子结点,则设置其双亲结点的指针为空。 b、若删除点只有左子树,或只有右子树,则设置其双亲结点的指针指向左子树或右子树。 c、若删除点的左右子树均不为空,则: 1)、查询删除点的右子树的左子树是否为空,若为空,则把删除点的左子树设为删除点的右子树的左子树。 2)、若不为空,则继续查询左子树,直到找到最底层的左子树为止。 待实现
代码
#include <iostream> using namespace std; class Node { public: int value; Node *left; Node *right; Node(){left = right = NULL;} }; class BinSearchTree { private: Node *root; public: BinSearchTree(){this->root = NULL;} Node* Find(int value, Node* root) { if(root == NULL) { return NULL; } if (value < root->value) { Find(value,root->left); } else if(value > root->value) { Find(value,root->right); } else { return root; } } void Insert(Node *&root,Node*p) //此处需要使用二级指针/指针引用 { if(root == NULL) { root = p; cout <<"root = NULL" <<endl; } if(p->value > root->value) { Insert(root->right,p); } else if(p->value < root->value) { Insert(root->left,p); } } void Delete(int value, Node *root) { } void PreOrder(Node *root) { if(root == NULL) return; else { cout <<root->value<< " "; PreOrder(root->left); PreOrder(root->right); } } void MiddleOrder(Node *root) { if(root == NULL) return; else { MiddleOrder(root->left); cout << root->value <<" "; MiddleOrder(root->right); } } void PostOrder(Node *root) { if(root == NULL) return; else { PostOrder(root->left); PostOrder(root->right); cout << root->value <<" "; } } void Print() { cout <<"前序遍历"<<endl; PreOrder(this->root); cout <<"中序遍历"<<endl; MiddleOrder(this->root); cout <<"后续遍历" <<endl; PostOrder(this->root); } void CreateBst(int a[],int n) { for(int i = 0; i < n; i++) { Node *p = new Node(); p->value= a[i]; Insert(root,p); } } }; int main() { BinSearchTree bt; int num; cout << "请输入二叉排序树个数:"; cin >>num; int b[num]; for(int i =0; i < num; i++) { cin >> b[i]; } bt.CreateBst(b,num); bt.Print(); cout << "Hello world!" << endl; return 0; }
相关文章推荐
- 从上往下打印二叉树
- 用栈来实现后缀表达式
- windows上的tomcat配置
- ACM第六周竞赛题目——A LightOJ 1317
- 快学Scala习题解答—第十一章 操作符
- tiny_mce
- php---魔术方法(__wakeup和__sleep)
- 散列技术之线性探测法
- 洛谷1540 机器翻译 解题报告
- 快速幂模版
- HDU 2732 Leapin' Lizards
- hdu 2138 How many prime numbers 大规模素数判断
- CODE COMPLETE 2e Chapter 8&9
- 【LeetCode】(58)Length of Last Word(Easy)
- C++builder的文件读写操作总结(1)
- Good Bye 2014 D. New Year Santa Network 树形dp
- C++自增自减重载
- UIView及其子类
- 开始iOS 7中自动布局教程(一)
- Linux内核的编译步骤总结