C语言 二叉查找树性质详解及实例代码

C语言 二叉查找树性质详解及实例代码,第1张

概述二叉查找树性质1、二叉树每个树的节点最多有两个子节点的树叫做二叉树。2、二叉查找树

二叉查找树性质

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->a<k)    search(t->right);  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->a<k)      t=t->rigth;    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->a<x->a)    {      x=x->left;    }    else      x=x->right;  }  if(y==NulL)    root=k;  else if(k->a<y->a)    y->left=k;  else    y->right=k;}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

总结

以上是内存溢出为你收集整理的C语言 二叉查找树性质详解实例代码全部内容,希望文章能够帮你解决C语言 二叉查找树性质详解及实例代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1245372.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存