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

发布时间 - 2026-01-11 00:08:15    点击率:

二叉查找树性质

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语言数据结构树的双亲表示法实例详解  # C语言实现二叉树的搜索及相关算法示例  # C语言实现线索二叉树的定义与遍历示例  # C语言中计算二叉树的宽度的两种方式  # Prim(普里姆)算法求最小生成树的思想及C语言实例讲解  # 使用C语言实现最小生成树求解的简单方法  # C语言实现树的动态查找实例代码  # 子树  # 遍历  # 递归  # 二叉树  # 最小值  # 最多  # 可以用  # 一颗  # 希望能  # 很简单  # 可以直接  # 只需要  # 谢谢大家  # 来实现  # 树上  # 就可以  # 成正比  # 有两个  # 中找到  # 不小于 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  如何快速启动建站代理加盟业务?  JS经典正则表达式笔试题汇总  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  Python文本处理实践_日志清洗解析【指导】  如何构建满足综合性能需求的优质建站方案?  Android中AutoCompleteTextView自动提示  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  php结合redis实现高并发下的抢购、秒杀功能的实例  PHP正则匹配日期和时间(时间戳转换)的实例代码  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  Android利用动画实现背景逐渐变暗  高防服务器租用指南:配置选择与快速部署攻略  微信小程序 配置文件详细介绍  html如何与html链接_实现多个HTML页面互相链接【互相】  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  Laravel如何发送系统通知?(Notification渠道示例)  JS去除重复并统计数量的实现方法  如何快速选择适合个人网站的云服务器配置?  iOS中将个别页面强制横屏其他页面竖屏  如何在宝塔面板中修改默认建站目录?  如何在景安云服务器上绑定域名并配置虚拟主机?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  Laravel定时任务怎么设置_Laravel Crontab调度器配置  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  Android Socket接口实现即时通讯实例代码  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  在线制作视频网站免费,都有哪些好的动漫网站?  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  如何用低价快速搭建高质量网站?  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  详解Android中Activity的四大启动模式实验简述  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  如何在 Pandas 中基于一列条件计算另一列的分组均值  利用python获取某年中每个月的第一天和最后一天  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  深圳网站制作培训,深圳哪些招聘网站比较好?  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?