数据结构随笔——二叉树和五个重要性质

本文深入探讨了二叉树的基本概念,包括定义、五个重要性质及其证明,特别关注完全二叉树的特性。此外,还讨论了二叉树的存储、遍历方法及相关结论,为理解复杂数据结构打下基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉树是最常用的数据结构之一,笔者过去一直将关注点放在复杂的树结构(例如红黑树,自平衡树),认为那些才是树的重要应用,但当重新由基本看起,才发现树的基本定中就隐藏着树这一结构的精髓。尽管是些浅薄蠢笨的理解和推演,但笔者还是满怀兴奋的想要将它记录下来。

一、二叉树的定义

二叉树的定义不用多说,很多书本上都有明确的定义,但有些细节是笔者过去所没有注意的,先给出殷人昆教授对于二叉树的基本定义——

二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。

可以看出二叉树的定义是递归的,根结点的子树仍然是二叉树,到达空子树时递归定义结束。
一般来说,关于树的术语对于二叉树都是适用的,但应该明确的是二叉树不是树,理由如下:
- 树在图论中被视为用n-1条边连接n个结点的的特殊的图。图的顶点结合非空,故树的顶点非空。图论中另外定义了N叉树,它可以是空树,二叉树属于N叉树。
- 非空二叉树有根,根结点的子树有左右之分,次序不能颠倒;若其中一棵子树为空,则另一棵子树也必须保持左右之分。树可以没有根(自由树);即使有根,其子树也没有这种区分。

那么,这就出现一个问题——二叉树的叶结点无子女,是否可称它为无子树?
根据定义,应该是不能的,因为可认为叶子点的左右子树为空子树。
虽然认识这一区别的目的并非应试,但笔者还是提一句:个人认为在一般的测试中未必会考察到这么细致,所以遇到忽略这一细致区别的出题人时请不要过于惊讶。

二、二叉树的性质

接下来的描述中有必要用到一些数学符号,在Markdown中不好画出,因此我们再次规定一些符号——
- a^b—— a的b的次方 (计算机常用,无需多言)
- int_UP()—— 向上取整(即去掉浮点数的小数部分,然后将整数部分加1)
- int_DOWN()—— 向下取整(即去掉浮点数的小数部分,只留整数部分)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值