Ikaros的数据结构之二叉树(基础概念部分)

二叉树(Binary Tree)

在了解二叉树之前你需要了解如下内容:

1.树(Tree):是一种非线性数据结构(非线性数据结构包含
①树的数据结构:
树的数据结构
相关术语
a.根节点(root):树中没有前驱的结点
:一棵树中只有一个根节点
b.叶子结点(leaf):没有后继的结点
:一棵树中可有多个叶子结点
②各结点之间的关系
a.双亲结点与子女结点
 双亲结点是子女结点前驱,子女结点是双亲结点的后继
:Ⅰ.根节点无双亲,叶子节点无子女
  Ⅱ.除根结点外剩余所有结点向上只有一个双亲结点
  Ⅲ.除叶子结点外剩余所有结点向下可有(包含一个)多个子女结点
b.兄弟结点:同一个双亲结点的子女结点之间互称兄弟结点

a.结点的度:一个结点的子女个数(叶子结点度为0
b.树的度:树中度值最大的结点的度(设树的度为k(k>2),则称该树为k叉树)
④树的深度:树的层次数

对树状结构的特点的总结

1.有且只有一个结点无前驱(根结点
2.可有多个结点无后继(叶子结点
3.除根结点,叶子结点外:其余结点均只有一个双亲,但可以有(包含一个)多个子女结点

接下来,我们进入正题:二叉树

1.定义:度值最大为2的树

2.形态:
二叉树的形态
3.二叉树的数据结构表示
树
①二元组表示法
这种表示法需要包含两方面内容:①树中的结点成员②各结点成员之间的连接关系
首先,我们以Tree2为例:
  Data={A,B,C,D}
  Relation={<A,B>,<B,C>,<C,D>}
然后,我们试着来表示Tree1:
  Data={A,B,C,D,E,F,G,H,I,J}
  Relation={<A,B>,<A,C>,<B,D>,<B,E>,<C,F>,<D,G>,<E,H>,<E,I>,<F,J>}

②广义表表示法:根节点(左子女,右子女)
仍然以Tree1为例:
A(B,C)
B(D,E) C(,F)
D(G) E(H,I) F(J)
以上过程只是为了读者更好的理解,接下来才是用广义表表示法表示的结果:
  A(B(D(G),E(H,I)),C(,F(J)))
注:当只有左结点时,逗号可被省去;但是当只有右结点时,逗号不可省,否则会被误以为时左结点

以上这两种方法通常用在文档中,实际更多情况中用画图更多一些

4.二叉树的性质特点
a.任意一棵非空二叉树的叶子结点总比双分支结点多一个
证明:(证明过程中遵循的原则:结点总个数守恒)
因为在二叉树中,共有三类双亲结点:①有0个子女结点的双亲结点(叶子结点)②有1个子女的双亲结点③有2个子女结点的双亲结点
设有0个子女结点的双亲结点的个数为n0,有1个子女结点的双亲结点的个数为n1,有2个子女结点的双亲结点的个数为n2
若把二叉树中的所有结点都看作双亲结点,树中的结点总数为:n2+n1+n0
若把二叉树中的所有结点都看作子女结点,那么子女结点可以分为根节点和除根结点外的所有结点(根节点和 其他结点的区别在于根结点没有双亲结点,而其他结点都有双亲结点),所以其他结点的个数为n1+2*n2,则树中的结点总数为n1+2*n2+1
又因为树中的结点总数始终保持不变,所以:
   n2+n1+n0=n1+2*n2+1
显而易见可得: n0-n2=1
  又因为n0表示子女结点个数为0的双亲结点的个数,即叶子结点的个数,而n2表示子女结点个数为2的双亲结点的个数,即双分支结点的个数
  所以任意一棵非空二叉树的叶子结点总比双分支结点多一个
b.总结点个数为n的二叉树有n-1条边
证明:现有一个根结点,要使二叉树中结点总个数为n,则还需增加n-1个结点,又因为每新增加一个结点,二叉树中就新增加1条边,则增加n-1个结点,就增加了n-1条边。所以总结点个数为n的二叉树有n-1条边

5.常见的几种二叉树
a.满二叉树
  对二叉树按层编号:0,1,2……
  编号为i的层最多只有2^i个结点(每层结点个数最大值)
  若一棵h层的二叉树的每一层的结点个数都达到最大值,则称这棵二叉树为满二叉树
h层的满二叉树
b.完全二叉树:一棵h层的完全二叉树
特点:①前h-1层是满的
   ②最后一层连续缺失右边的结点(注:这里右边的结点并不是右子女结点,而是相对于左边的结点而言的)
h层的完全二叉树
满二叉树是特殊的完全二叉树:
满二叉树是特殊的完全二叉树
④要么只有一个单分支结点,要么没有:
二叉树
⑤若结点总个数为奇数,单分支结点个数为0;若n为偶数,单分支结点个数为1
⑥根据完全二叉树的结点总个数来判断该二叉树的层数
设该完全二叉树有h层,结点个数为n
则n满足2h-1-1<n<=2h-1
即2h-1<n+1<=2h
假设该二叉树的n=700,则210-1<700+1<=210,显而易见,h=10,该二叉树有10层
c.理想平衡二叉树(理想树)
  前h-1层是满的,最后一层随意摆放
结论:满二叉树是完全二叉树的子集,完全二叉树为理想二叉树的子集
d.歪斜树:结点偏向于左边或右边的树

6.对任意一棵二叉树按层从上到下,从左至右对结点进行编号(1,2,3,4,5……)
注意:对缺失的结点也要编号
则编号为i的结点若有左子女结点,那么编号为2i;若有右子女结点,则编号为2i+1。
 编号为i(i>1)的结点的双亲结点的编号为:[i/2] ([]表示对结果取整)

(。・∀・)ノ本节结束!!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Gradio是一个用于构建交互式机器学习应用的开源库。它提供了一个简单易用的界面,可以让用户通过图形界面与机器学习模型进行交互。在Linux系统上,你可以通过以下步骤来安装Gradio: 1. 确保你已经安装了git。如果没有安装,你可以使用以下命令在Ubuntu上安装git:sudo apt-get install git \[1\]。 2. 克隆Gradio项目的代码库。你可以使用以下命令将代码库克隆到你的数据盘autodl-tmp目录下:git clone https://github.com/THUDM/ChatGLM-6B \[1\]。 3. 安装Gradio的依赖项。你可以根据项目的要求安装所需的依赖项,具体步骤可以在项目的文档中找到\[2\]。 安装完成后,你就可以开始使用Gradio来构建交互式的机器学习应用了。希望这个回答对你有帮助!如果你有任何其他问题,欢迎随时提问。 #### 引用[.reference_title] - *1* [记录一次Linux下ChatGLM部署过程](https://blog.csdn.net/Ikaros_521/article/details/130492303)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [快速构建机器学习Web应用的神器:Gradio](https://blog.csdn.net/qq_41667743/article/details/131253780)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值