数据结构——树与二叉树

今天是2024.4.26日,早起的一天,加油吧,啥也不说,开干:

一,树的概念:

(结点==节点)

(1)结点:包括一个数据元素以及若干指向其他结点的分支信息;

(2)树:N(N>=0)个结点的有限集合;N=0时,称为空树;

(3)根节点:在树结构中,只有一个结点没有前驱(前件),该节点简称 根节点,简称 根;

(3)父节点:除根结点外,每个节点都有一个 前驱,称为该节点的 父节点;

(6)叶子节点:没有后继的结点;

(4)子节点:除叶子节点外,每个节点都有后继,称为该节点的子节点;

(7)度:树中一个结点的子节点个数称为该节点的度;

(8)树的度:树中结点的最大度数;

(8)树的深度(高度):树的层次;

(9)子树:以某个节点的一个子节点为根节点构成的树,称为该节点的子树;

二,树的性质:

(1)总分支数:N1*1 + N2*2 + N3 *3+ N4*4 + N5*5 + ... + Nn*n(Nn表示度为 n 的节点);

(2)总结点数=N0+N1+N2+N3+...+NNn;

(2)总结点数 = 总分支数 + 1 ;

(3)度为 m 的树第 i 层最多有 m的(i-1)次幂个结点; 

举例

一棵树的度为4,其中度为1 2 3 4的节点个数分别为2 2 3 3,求该树的叶子节点个数:

        总分支树:2*1+2*2+3*3+4*3=27;

        总结点数:27+1=28=N0+2+2+3+3,N0=18;

        所以叶子节点个数为 18;

三,二叉树的概念:

任何树都可以转换为二叉树,因此二叉树是学习的重点;

(1)二叉树:每个节点的度不大于 2 并且结点次序不能颠倒;

(2)满二叉树:高度为h,含有( 2 的 h 次幂-1)个结点的二叉树。即除叶子节点外,每个节点的度都为2。

(3)完全二叉树:深度为K,有n个结点的二叉树当且仅当其每一个节点都与深度为k的满二叉树一一对应,称其为完全二叉树;(深度相同)

说白了,完全二叉树是满二叉树的子集,且存在相等的情况;

值得注意的是,完全二叉树是从右缺的;

举例:

 深度为5的完全二叉树的结点数不可能为( )

      A,15        B,16        C,17        D,18

 ​​​​​​​

四,二叉树的性质

(以下讨论情况均为非空二叉树)

(1)N0 = N2 + 1 ; 即叶子节点数 等于 度为2的结点数 加一;

(2)第 K 层最多有 2 的(k减1)次幂 个结点;

(3)高度为H的二叉树最多有 2的h次幂减1个结点;

(4)结点位N的完全二叉树的高度的计算:

举例:一棵二叉树共有25个节点,其中五个是叶子节点,则度为1的结点数为:

因为 N0 = N2 + 1,N2=4,而 N = N0 + N1 + N2;

所以,N1=16;

五,二叉树的存储

(1)顺序存储

自上而下,自左向右,预留空间(空元素);

比如,H,K之间缺少结点, 但必须为他们预留空间;

(2)链式存储

在二叉链表(二叉树的链式存储结构)中链结点至少包含三个域:

 

六,二叉树的遍历

二叉树的遍历是指按照某条搜索路径访问树中的每个结点,使每个节点被且仅被访问一次。常见的三种遍历方法是 前序/中序/后序遍历。

(1)前序(先序)遍历:先根后左再右;

以上图为例:A是整个树的根节点,B是左节点,左节点遍历完后再遍历右节点——A B;

以B为根结点的子树,先根后左再右,——B D H ,左节点遍历完后再遍历右节点——E;

以A为根结点的左节点遍历完后再遍历右节点;

以C为根节点的子树,先根后左再右——C F G;

因此,遍历顺序为 A B D H E C F G;

(2)中序遍历:先左再根后右

仿照上面思路,遍历顺序为 H D B E A F C G;

(3)后序遍历:先左再右后根

仿照上面思路,遍历顺序为 H D E B F G C A ;

举例:

假设一个二叉树的后序遍历是 G H D E B I J F C A ,中序遍历是 G D H B E A C I F J ,则前序遍历是:

根据中后序遍历容易得出 A 为根节点,中序遍历中 A 之前的都是树的左分支:G D H B E ,A之后的都是树的右分支:C I F J;

根据这个思想,由后序遍历容易得出,A的子节点有  B,C;剩下的就容易得出了。

其前序遍历为:A B D G H E C F I J ;

 

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值