二叉查找树的操作
2016-09-18 21:07
295 查看
概念:使二叉树变成二叉查找树的性质是,对于树中的每个结点x,它的左子树中所有关键字值小于x的关键字值,而它的右子树中所有关键字的值大于x的关键字值
先序输入
关键的问题是首先要对是否为空树进行测试,否则会在null上兜圈子
以findmin的递归为例,从根开始并且只要有左儿子就向左进行,终止点是最小的元素
findmax的非递归算法
插入
重复元的插入可以通过在结点纪录中保留一个附加域
删除
<span style="font-size:14px;">bitree delete_(bitree &bt,int k)
{
bitree tmpcell; //定义在外面的变量tmcepll
if(bt==NULL)
return bt;
else if(k<bt->data)
bt->lchild=delete_(bt->lchild,k);
else if(k>bt->data)
bt->rchild=delete_(bt->rchild,k);
else if(bt->lchild!=NULL && bt->rchild!=NULL)
{
tmpcell=findmin(bt->rchild);
bt->data=tmpcell->data;
bt->rchild=delete_(bt->rchild,bt->data);
}
else
{
tmpcell=bt;
if(bt->lchild==NULL)
bt=bt->rchild;
else if(bt->rchild==NULL)
bt=bt->lchild;
free(tmpcell);
}
return bt;//每次返回赋值给的是结点的左孩子或者是右孩子
}</span>
先序输入
<span style="font-size:14px;">typedef struct bitnode { int data;//对于数字的输入注意对于每个数字之间的空格如果是字符的话就不用空格把每个字符分开 struct bitnode* lchild; struct bitnode* rchild; }bitnode,*bitree; void create(bitree &bt) { int data; cin>>data; if(data==0) bt=NULL; else { bt=(bitree)malloc(sizeof(bitnode)); bt->data=data; create(bt->lchild); create(bt->rchild); } }</span><pre name="code" class="cpp">bitree insert(bitree p,int k) { if(p==NULL) { p=(bitree)malloc(sizeof(bitnode)); p->data=k; p->lchild=NULL; p->rchild=NULL; } else if(k<p->data) { p->lchild=insert(p->lchild,k); } else if(k>p->data) { p->rchild=insert(p->rchild,k); } return p; }
关键的问题是首先要对是否为空树进行测试,否则会在null上兜圈子
<span style="font-size:14px;">bitree find(bitree bt,int k)//寻找到某一个数值 { if(bt==NULL) return NULL; else if(k<bt->data) return find(bt->lchild,k); else if(k>bt->data) return find(bt->rchild,k); else return bt; }</span>查找最大最小值
以findmin的递归为例,从根开始并且只要有左儿子就向左进行,终止点是最小的元素
bitree find(bitree bt,int k)//寻找到某一个数值 { if(bt==NULL) return NULL; else if(k<bt->data) return find(bt->lchild,k); else if(k>bt->data) return find(bt->rchild,k); else return bt; }
findmax的非递归算法
bitree findmax(bitree bt)//非递归寻找最大值 { if(bt!=NULL) { while(bt->rchild!=NULL) { bt=bt->rchild; } } return bt; }
插入
重复元的插入可以通过在结点纪录中保留一个附加域
bitree insert(bitree p,int k) { if(p==NULL) { p=(bitree)malloc(sizeof(bitnode)); p->data=k; p->lchild=NULL; p->rchild=NULL; } else if(k<p->data) { p->lchild=insert(p->lchild,k); } else if(k>p->data) { p->rchild=insert(p->rchild,k); } return p; }
删除
<span style="font-size:14px;">bitree delete_(bitree &bt,int k)
{
bitree tmpcell; //定义在外面的变量tmcepll
if(bt==NULL)
return bt;
else if(k<bt->data)
bt->lchild=delete_(bt->lchild,k);
else if(k>bt->data)
bt->rchild=delete_(bt->rchild,k);
else if(bt->lchild!=NULL && bt->rchild!=NULL)
{
tmpcell=findmin(bt->rchild);
bt->data=tmpcell->data;
bt->rchild=delete_(bt->rchild,bt->data);
}
else
{
tmpcell=bt;
if(bt->lchild==NULL)
bt=bt->rchild;
else if(bt->rchild==NULL)
bt=bt->lchild;
free(tmpcell);
}
return bt;//每次返回赋值给的是结点的左孩子或者是右孩子
}</span>
/* 6 如何输入带空的树,先序例子 0为空 / \ 2 8 /\ /\ 1 4 0 0 /\ / 0 0 3 /\ 0 0 */
相关文章推荐
- 二叉查找树的各种操作C++实现
- 二叉查找树(binary search tree)上的基本操作
- 【算法导论】二叉查找树的操作C++实现
- 2012/4/9----二叉查找树(二叉排序树)的各种操作
- 二叉查找树(二叉排序树)创建,插入,删除操作。
- 二叉查找树的操作
- 二叉查找树与红黑树概念性质及操作时间复杂度
- 二叉查找树的定义以及几个基本操作
- 二叉查找树基本操作实现
- 二叉查找树(Binary Search Tree)相关操作
- 二叉查找树的各项操作(重点是结点的删除部分和递归的运用)
- 二叉查找树的操作(插入、删除、查找)
- 二叉查找树的简单操作(2)
- 二叉查找树和AVL树的基本操作(AVL树就是一颗特殊的二叉查找树。)
- 二叉查找树的一些操作(search,getminvalue,get maxvalue,insert)
- 二叉查找树(Binary Search Tree)--结点的删除操作(导入自原博客)
- 二叉查找树(二叉排序树)操作大全C++实现
- BST二叉查找树的实现与操作
- 二叉查找树的基本操作之查找插入删除
- 二叉查找树的其他操作