C语言中二叉查找树怎么实现
C语言中二叉查找树怎么实现
本文小编为大家详细介绍“C语言中二叉查找树怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言中二叉查找树怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
二叉查找树性质
1、二叉树
每个树的节点最多有两个子节点的树叫做二叉树。
2、二叉查找树
一颗二叉查找树是按照二叉树的结构来组织的,并且满足一下性质:
一个节点所有左子树上的节点不大于盖节点,所有右子树的节点不小于该节点。
对查找树的操作查询,插入,删除等操作的时间复杂度和树的高度成正比, 因此,构建高效的查找树尤为重要。
查找树的遍历
先序遍历
查找树的遍历可以很简单的采用递归的方法来实现。
structlist{structlist*left;//左子树structlist*right;//右子树inta;//结点的值};voidpreorder(structlist*t)//t为根节点的指针{if(t!=NULL){printf("%d,",t->a);preorder(t->left);perorder(t->right);}}
中序遍历
structlist{structlist*left;//左子树structlist*right;//右子树inta;//结点的值};voidpreorder(structlist*t)//t为根节点的指针{if(t!=NULL){preorder(t->left);printf("%d,",t->a);perorder(t->right);}}
后序遍历
structlist{structlist*left;//左子树structlist*right;//右子树inta;//结点的值};voidpreorder(structlist*t)//t为根节点的指针{if(t!=NULL){preorder(t->left);perorder(t->right);printf("%d,",t->a);}}
查找树的搜索
给定关键字k,进行搜索,返回结点的指针。
structlist{structlist*left;//左子树structlist*right;//右子树inta;//结点的值};structlist*search(structlist*t,intk){if(t==NULL||t->a==k)returnt;if(t->a
也可以用非递归的形式进行查找
structlist{structlist*left;//左子树structlist*right;//右子树inta;//结点的值};structlist*search(structlist*t,intk){while(true){if(t==NULL||t->a==k){returnt;break;}if(t->a
最大值和最小值查询
根据查找树的性质,最小值在最左边的结点,最大值的最右边的 结点,因此,可以直接找到。
下面是最大值的例子:
{structlist*left;//左子树structlist*right;//右子树inta;//结点的值};structlsit*max_tree(structlsit*t){while(t!=NULL){t=t->right;}returnt;};
查找树的插入和删除
插入和删除不能破坏查找树的性质,因此只需要根据性质,在树中找到相应的位置就可以进行插入和删除操作。
structlist{structlist*left;//左子树structlist*right;//右子树inta;//结点的值};voidinsert(structlist*root,structlist*k){structlist*y,*x;x=root;while(x!=NULL){y=x;if(k->a
读到这里,这篇“C语言中二叉查找树怎么实现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。
推荐阅读
-
windows安装touble c
近期有些网友想要了解windows?安装touble的相关情况,小编通过整理给您分享一下。为什么现在还需要TurboC?在当今V...
-
C/C++如何获取CAN信号
C/C++如何获取CAN信号本篇内容主要讲解“C/C++如何获取C...
-
C语言怎么通过二分查找实现猜数字游戏
C语言怎么通过二分查找实现猜数字游戏本文小编为大家详细介绍“C语言...
-
C语言数据结构中的线性表怎么使用
C语言数据结构中的线性表怎么使用这篇文章主要介绍“C语言数据结构中...
-
C语言的数据结构怎么理解
C语言的数据结构怎么理解这篇文章主要介绍了C语言的数据结构怎么理解...
-
C语言与C++中内存管理的方法
C语言与C++中内存管理的方法这篇文章主要介绍了C语言与C++中内...
-
C语言链式队列与循环队列怎么实现
C语言链式队列与循环队列怎么实现这篇文章主要介绍了C语言链式队列与...
-
C语言冒泡排序怎么实现
C语言冒泡排序怎么实现这篇文章主要介绍了C语言冒泡排序怎么实现的相...
-
C语言如何实现斐波那契数列
C语言如何实现斐波那契数列这篇文章主要介绍了C语言如何实现斐波那契...
-
C语言如何实现无符号数和有符号数间的运算
C语言如何实现无符号数和有符号数间的运算本篇内容主要讲解“C语言如...