二叉树基本性质与二叉树的遍历

二叉树基本性质与二叉树的遍历树的基本概念 树的定义 树是一种非线性结构树的基本术语 结点 结点不仅包含数据元素 而且包含指向子树的分支 结点的度 结点拥有的子树个数或者分支的个数 树的度 树中各结点度的最大值 叶子结点 又叫做终端结点 指度为 0 的结点 非终端结点 又叫做分支结点 指度不为 0 的结点 孩子 结点的子树的根 双亲 树的存储结构

树的基本概念:

  • 树的定义:树是一种非线性结构
  • 树的基本术语
    结点:结点不仅包含数据元素,而且包含指向子树的分支。
    结点的度:结点拥有的子树个数或者分支的个数。
    树的度:树中各结点度的最大值。
    叶子结点:又叫做终端结点,指度为0的结点。
    非终端结点:又叫做分支结点,指度不为0的结点。
    孩子:结点的子树的根。












  • 树的存储结构
    顺序结构:双亲存储结构——用一维数组就可以实现。
    链式存储结构:
    孩子存储
    孩子兄弟存储结构:








  • 二叉树
    在这里插入图片描述

  • 二叉树的形态
    1、 空二叉树
    2、 只有根节点
    3、 只有左子树
    4、 只有右子树
    5、 左右子树都有。
    在这里插入图片描述












  • 特殊的二叉树

满二叉树:在一棵二叉树中,如果所有的分支结点都有左右孩子的结点,并且叶子结点都集中在二叉树的最下一层,则这样的二叉树称为满二叉树。

完全二叉树:如果对一棵深度为k、有n个结点的二叉树进行编号后,各结点的编号与深度为k的满二叉树中的相同位置上的结点的编号均相同,那么这棵二叉树就是一棵完全二叉树。

在这里插入图片描述

  • 二叉树的性质
  • 例:在一棵度数为4的树T中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T的叶结点的个数是(B)
    A、41
    B、82
    C、113
    D、122








解析:

直接引用上述叶结点的公式n0=1+n2+2n3+(4-1)n4=1+1+210+320=82

不仅仅适用于二叉树

  • 例:在一棵三叉树中,度为3的结点数位2个,度为2的结点数为1个,度为1的结点数为2个,则度为0的结点(叶子)数为(C)
    A、4
    B、5
    C、6
    D、7








2、二叉树的第i层上最多有2^(i-1)(i≥1)个结点。

例:如图,n=5,结点B编号为2,22=4<5,则编号为4的结点D为结点B的左孩子;22+1=5,则编号为5的结点E。
在这里插入图片描述

5、给定n个结点,能构成h(n)种不同的二叉树,h(n)=C(n,2*n)/(n+1) .

6、具有n个结点的完全二叉树的高度(或深度)为[logn]+1。

  • 二叉树的存储结构
typedef struct BTNode { 
    char data;//这里默认结点data域为char型 struct BTNode *lchild;//左指针域 struct BTNode *rchild;//右指针域 } BTNode; 

-二叉树的遍历(遍历就是全部走遍)。

在这里插入图片描述

先序遍历:
遍历过程:根->左->右
在这里插入图片描述




中序遍历(LDR)
遍历过程:左->根->右
在这里插入图片描述




后序遍历:
遍历过程:左->右->根
在这里插入图片描述




例:表达式(a-(b+c))*(d/e)存储在图所示的一棵以二叉链表为存储结构的二叉树中(二叉树结点的data域为字符型),编写程序求出改表达式的值。

分析:
可以把二叉树分为三个部分,左子树(a-(b+c))为表达式A,右子树(d/e)为B,先求左子树的值,再求右子树的值,最后两式结果相乘就是整个表达式的数值。
可以用后序遍历来完成:




int comp(BTNode *P) { 
    int A,B; if (P!=NULL) { 
    if (P->lchild!=NULL&&P->rchild!=NULL) { 
    A=comp(P->lchild); B=comp(P->rchild); return op(A,B,P->data); } else return P->data-'0'; } else return 0; } 

说明:函数int op(int A,int B,char C)返回的是以C为运算符,以A,B为操作数的算式的数值,例如C为“+“,则返回为A+B的值。

解析:先序:根左右,根A;中序:左根右,左{CB}右{EDF} 后序:左右根,左{CB},右{EFD},根A

  • 线索二叉树:二叉树被线索化后近似于一个线性结构,分支结构的遍历操作就转化为了近似于线性结构的遍历操作,通过线索的辅助使得寻找当前结点前驱或者后继的平均效率大大提高。
    指向前驱或后继的指针称为线索。
    1、 中序线索二叉树
    在这里插入图片描述
    ltag、rtag为标识域。








typedef struct TBTNode{     char data; int ltag,rtag; struct TBTNode *lchild; struct TBTNode *rchild; }TBTNode; 

优势

不足

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206490.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午3:34
下一篇 2026年3月19日 下午3:35


相关推荐

  • Windows10蓝屏代码:SYSTEM_SERVICE_EXCEPTION 排查及解决方案

    Windows10蓝屏代码:SYSTEM_SERVICE_EXCEPTION 排查及解决方案Windows10 蓝屏代码 SYSTEM SERVICE EXCEPTION 排查及解决方案问题描述 win10 正常使用过程中 出现蓝屏 蓝屏代码为 SYSTEM SERVICE EXCEPTION 出现时间或时机没有明显规律 但最近两次出现均是在电脑待机睡眠后重新唤醒时 电脑配置环境如下其中 内存为阿斯加特 32GB 灰套条解决方案因最近出现时机为睡眠唤醒中 考虑与主板芯片组驱动及睡眠机制有关 故重新安装系统 可选 如条件允许 重新安装系统是最好的解决方案 可以基本排除掉系

    2026年3月19日
    2
  • c语言枚举类型enum用法参数,C语言枚举类型(Enum)

    c语言枚举类型enum用法参数,C语言枚举类型(Enum)在实际编程中 有些数据的取值往往是有限的 只能是非常少量的整数 并且最好为每个值都取一个名字 以方便在后续代码中使用 比如一个星期只有七天 一年只有十二个月 一个班每周有六门课程等 以每周七天为例 我们可以使用 define 命令来给每天指定一个名字 include defineMon1 defineTues2 defineWed3 defineThurs4 defineFri

    2026年3月17日
    2
  • 软件测试全套教程,软件测试自学线路图

    软件测试全套教程,软件测试自学线路图软件测试:软件测试是为了发现程序中的错误而执行程序的过程。通俗的说,软件测试需要在发布软件之前,尽可能的找软件的错误,尽量避免在发布之后给用户带来不好的体验,并要满足用户使用的需求。现在市面上这么多软件,每个软件背后都有软件测试工程师的功劳,这也造就了软件测试行业前景非常好,今天我就分享一下自学线路图,及全套教程!软件测试学习线路图点击查看大图第一阶段:该…

    2022年6月11日
    42
  • java中char是几个字节_关于java中char占几个字节,汉字占几个字节

    java中char是几个字节_关于java中char占几个字节,汉字占几个字节我们平常说 java 中 char 占 2 个字节 可又说汉字在不通的编码格式中所占的位数是不同的 比如 gbk 中汉字占 2 个字节 utf8 中多数占 3 个字节 少数占 4 个 而所有汉字在 java 程序中我们都可以简单的用 charc 字 表示 那么问题来了 在 java 程序运行的时候 究竟汉字占几个字节呢 在讨论这个问题之前 我们需要先区分 unicode 和

    2026年3月16日
    2
  • Django(17)orm查询操作「建议收藏」

    Django(17)orm查询操作「建议收藏」前言查找是数据库操作中一个非常重要的技术。查询一般就是使用filter、exclude以及get三个方法来实现。我们可以在调用这些方法的时候传递不同的参数来实现查询需求。在ORM层面,这些查询条件都

    2022年7月29日
    7
  • 时间倒计时代码

    简单易用的倒计时js代码-站长素材*{margin:0;padding:0;list-style:none;}body{font-size:18px;text-align:center;}.time{height:30px;padding:200px;}          00天       00时       00分   

    2022年4月8日
    74

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号