树与二叉树递归版c++
树与二叉树
总算把你给盼来了
现在才关注我 确实是晚了点
但没关系 来了就好
工具:vs code 、ppt
操作系统:Linux
目录
一.树与森林
图1A
1.1、定义
树是n个结点的有限集合。当n=0时,称为空树。而任意非空树应满足:
a.有且仅有一个特定的根结点。如“A”是该树的根结点。
b.当n>1时,其余结点可分为m(m>0)个互不相交的有限集合。其中每一个集合本身又是一棵树,称为根结点的子树。如“c”是一棵子树。
*注:n个结点的树有n-1条边。
2.树的其他概念
2.1结点:指包含数据元素及若干个指向其子树的分支。
2.2度:结点拥有子树数称为结点的度。
如结点“A”的度是3,结点“C”的度是0。
a.度为0的结点为叶子结点(或终端结点)。“D”、“E”、“F”、“G”、“H”……是叶子结点。
b.度不为0的结点为非终端结点(或分支结点)。如“A”、“B”、“D”非终端结点。
c.树的度是树内某个结点的最大值。如上图树的最大值结点有“A”、“C”,度都是为3。所有该树的度是3。
2.3双亲结点:如结点“B”和“C”的双亲结点是“A”。
2.4左子树与右子树:双亲结点下的左子树与右子树。
2.5兄弟与堂兄弟结点:同一个双亲结点的孩子称为兄弟。在同一层而不在双亲结点下的结点称为堂兄弟。
2.6层:树的层次从根结点开始为第一层。如上图的树层数是5。
2.7深度或高度:树中结点的最大层次称为树的深度或高度。
2.二叉树
图2B
二叉树一共有五种基本形态。
(1)空二叉树。
(2)只有一个根结点。
(3)根结点只有左子树。
(4)根结点只有右子树。
(5)根结点既有有左子树又有右子树。
性质5:设完全二叉树的元素其编号为i, 1≤i≤n,有以下关系成立:
3.二叉树的遍历
二叉树的存储结构——链式存储
以c++的形式实现二叉树的存储结构——链式存储(二叉链表)。
结构:
先序遍历构建二叉树:
3.1、二叉树的四种遍历(递归):
✎遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示。 ——《百度百科》3.3、main()调用
以上的代码是以递归的形式来写。后面会以“力扣【https://leetcode-cn.com/】”为模型,实现迭代版二叉树。
《》
《》
侵删致歉
转载需经同意并引用出处