今天小编给大家分享一下C语言二叉查找树怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
成都创新互联是一家专注于网站设计、成都做网站与策划设计,凭祥网站建设哪家好?成都创新互联做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:凭祥等地区。凭祥做网站价格咨询:13518219792
二叉查找树性质
1、二叉树
每个树的节点最多有两个子节点的树叫做二叉树。
2、二叉查找树
一颗二叉查找树是按照二叉树的结构来组织的,并且满足一下性质:
一个节点所有左子树上的节点不大于盖节点,所有右子树的节点不小于该节点。
对查找树的操作查询,插入,删除等操作的时间复杂度和树的高度成正比, 因此,构建高效的查找树尤为重要。
查找树的遍历
先序遍历
查找树的遍历可以很简单的采用递归的方法来实现。
struct list { struct list *left;//左子树 struct list *right;//右子树 int a;//结点的值 }; void preorder(struct list *t)//t为根节点的指针 { if(t!=NULL) { printf("%d,",t->a); preorder(t->left); perorder(t->right); } }
中序遍历
struct list { struct list *left;//左子树 struct list *right;//右子树 int a;//结点的值 }; void preorder(struct list *t)//t为根节点的指针 { if(t!=NULL) { preorder(t->left); printf("%d,",t->a); perorder(t->right); } }
后序遍历
struct list { struct list *left;//左子树 struct list *right;//右子树 int a;//结点的值 }; void preorder(struct list *t)//t为根节点的指针 { if(t!=NULL) { preorder(t->left); perorder(t->right); printf("%d,",t->a); } }
查找树的搜索
给定关键字k,进行搜索,返回结点的指针。
struct list { struct list *left;//左子树 struct list *right;//右子树 int a;//结点的值 }; struct list * search(struct list *t,int k) { if(t==NULL||t->a==k) return t; if(t->aright); else search(t>left); };
也可以用非递归的形式进行查找
struct list { struct list *left;//左子树 struct list *right;//右子树 int a;//结点的值 }; struct list * search(struct list *t,int k) { while(true) { if(t==NULL||t->a==k) { return t; break; } if(t->arigth; else t=t->left; } };
最大值和最小值查询
根据查找树的性质,最小值在最左边的结点,最大值的最右边的 结点,因此,可以直接找到。
下面是最大值的例子:
{ struct list *left;//左子树 struct list *right;//右子树 int a;//结点的值 }; struct lsit *max_tree(struct lsit *t) { while(t!=NULL) { t=t->right; } return t; };
查找树的插入和删除
插入和删除不能破坏查找树的性质,因此只需要根据性质,在树中找到相应的位置就可以进行插入和删除操作。
struct list { struct list *left;//左子树 struct list *right;//右子树 int a;//结点的值 }; void insert(struct list *root,struct list * k) { struct list *y,*x; x=root; while(x!=NULL) { y=x; if(k->aa) { x=x->left; } else x=x->right; } if(y==NULL) root=k; else if(k->a a) y->left=k; else y->right=k; }
以上就是“C语言二叉查找树怎么实现”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注创新互联行业资讯频道。