平衡二叉树的节点搜索函数——Ada应用实例之四
来源:互联网 发布:windows8卸载软件 编辑:程序博客网 时间:2024/06/13 11:04
平衡二叉树的节点搜索函数——Ada应用实例之四
以下是一个平衡二叉树的节点搜索函数(原帖地址):
binarytree *search(binarytree *tree,binarytree *parent,Type data)
{
binarytree *p = (binarytree *)malloc(sizeof(struct binarytree)*1);
p = tree;
bool find = false;
while(p && !find){
parent = p;
if(p->data == data){
find = true;
//printf("find %d/n",p->data);
}
else if(p->data > data)
p = p->leftch;
else
p = p->rightch;
}
return find?p:NULL;
}
上面程序中把搜索到的节点赋给parent。在另一个删除节点的函数中有如下语句:
if((p = search(*tree,parent,data)) != NULL){
if(p->leftch == NULL && p->rightch == NULL){//叶子节点
if(p->data < parent->data)//左叶子节点
parent->leftch = NULL;
else//右叶子节点
parent->rightch = NULL;
上述代码不能实现删除功能。问题之一是变量parent并没有指向搜索到的节点。这是因为虽然在函数search中把搜索到的节点赋给函数的形参parent,但当调用返回后,外部的实参parent没有得到这个节点。
解决方法是把形参parent定义为“binarytree **parent;”,把“parent = p;”改为“*parent = p;”,把调用语句“search(*tree, parent, data)”改为“search(*tree, &parent, data)”。
如果用Ada编程,那么在编译期间就可发现上述问题。
Ada的过程/函数定义可以对形参指定如下三种模式:
a) in:该类形参是一个常数,其值由实参决定,在过程/函数中只能对其进行读操作,不能对其进行写操作;
b) in out:该类形参是一个变量,其初值由实参决定,在过程/函数中既能对其进行读操作,也能对其进行写操作,写操作同时也改变相应实参的值;
c) out:该类形参是一个没有初值的变量,在过程/函数中既能对其进行读操作,也能对其进行写操作,写操作同时也改变相应实参的值,但读操作必须在写操作之后。
以下是一个简单例子:
procedure Add (A, B: in Integer; C: out Integer) is
begin
C := A + B;
end Add;
假如在上述程序中写一行“A := 1;”,那么编译将报告以下错误:
Assignment to “in” mode parameter not allowed
由此可见,Ada的参数模式可以有效地避免实参与形参相结合时的问题。
- 平衡二叉树的节点搜索函数——Ada应用实例之四
- 函数strspn的实现——Ada应用实例之八
- 数学函数的异常捕获——Ada应用实例之十
- 全局变量的初值——Ada应用实例之七
- 数组下标越界——Ada应用实例之三
- 结构体扩展——Ada应用实例之五
- 赋值表达式——Ada应用实例之十一
- 动态分配内存——Ada应用实例之十二
- 二叉搜索树—平衡二叉树
- 数组的指定初始化——Ada应用实例之九
- 嵌套循环的控制变量——Ada应用实例之十三
- 平衡二叉树 搜索二叉树 有父节点的二叉树
- 数据结构——平衡二叉搜索树(AvlTree)的实现
- 平衡二叉搜索树——红黑树
- 数据结构——二叉搜索平衡树
- 简易计算器设计中的一个数据结构问题——Ada应用实例之二
- 枚举型自加——Ada应用实例之六
- 二叉搜索树--进阶篇之平衡二叉搜索树
- 云里雾里
- showModalDialog使用
- 关于隐藏Windows任务栏中的应用程序按钮的几种方法的介绍
- 类、虚类、ID
- Select函数实现原理分析(转载)
- 平衡二叉树的节点搜索函数——Ada应用实例之四
- ORACLE parent latch和children latch
- Cygwin完全下载指南
- 关于链表[回顾]
- 关于LNK2001错误的一些总结 ---ZT
- 验证控件
- 秦策2
- 递归算法和非递归算法的difference和转换
- STL中map、vector的iterator的简单用法