11.3递归建二叉树,二叉树函数规范化输入输出,一些二叉树性质,求叶子结点与树的高度

本文主要是介绍11.3递归建二叉树,二叉树函数规范化输入输出,一些二叉树性质,求叶子结点与树的高度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

建树 ,递归建树

输入为

建立树

递归

函数参数表为引用或指针

void Creat(BiTree *T){char ch;scanf("%c",&ch);if(ch=='#'){*T=NULL;}else{*T=(BiTree)malloc(sizeof(BiTNode));(*T)->data=ch;Creat(&(*T)->nextleft);Creat(&(*T)->nextright);}
}
void CreatBiTree(BiTree &T){char ch;cin>>ch;if(ch=='#'){T=NULL;}else if(ch!='#'){T=new BiTNode;T->data=ch;CreatBiTree(T->lchild);CreatBiTree(T->rchild);}
}

求叶子节点数量

如果左右孩子为空指针,自己不为空,那么就是叶子结点;如果左右不空,就不是叶子结点。

递归解决,返回左右子树叶子结点的加和 

using namespace std;
#include<iostream>
void creat(BiTree &tree){char t;cin>>t;if(t=='#'){tree=nullptr;}else{tree=new BiTNode;tree->data=t;creat(tree->lchild);creat(tree->rchild);}
}
int countleaf(BiTree &tree){if(tree!=nullptr){if(tree->lchild!=nullptr||tree->rchild!=nullptr){return countleaf(tree->lchild)+countleaf(tree->rchild);}else{return 1;}}else{return 0;}
}

思路就是先判断当下结点是不是空结点

是,返回是的输出

不是,则接着判断是不是叶子节点

是,则返回1

不是,则递归向下

二叉树高度

#include<iostream>
using namespace std;
void creat(BiTree &tree){char t;cin>>t;if(t=='#'){tree=nullptr;}else{tree=new BiTNode;tree->data=t;creat(tree->lchild);creat(tree->rchild);}
}
int Depth(BiTree tree){if(tree==nullptr){return 0;}else{if(tree->lchild!=nullptr||tree->rchild!=nullptr){return 1+max(Depth(tree->rchild),Depth(tree->lchild));}else{return 1;}}
}

小总结 

就是先判断是不是空结点,如果是空结点就直接返回;

不是,就接着判断当下结点是不是叶子结点,判断方式为该节点的孩子指针是否都是空,只要有一个不空就不是叶子结点

如果是叶子结点就意味着递归到了底层,进行相应的操作与对应的返回值

如果不是,就是接着递归向下,返回值为相应的操作

一些性质 

求 后序是左右根,先序为根左右,中序是左根右

如果后序和中序相同,则都没有右结点

如果结点有左孩子,中序为左根右

中序前驱,就是中序遍历中该节点的前一个结点

完全二叉树有111个结点,序列在13号位置上的结点,在先序遍历序列中排在96号结点位置之前

七位2进制到128,六位二进制到64,有111个结点,说明到了第8层,还没填满

第一层1个结点,第二层2,第三层2^2,第六层2^5,

第n层一共最多能装为2^(n-1),取对数,向上取整,就是说,找底数最接近的规整指数,往上找,而不是往下找

111比64大,但是要往上找,最近的是128,即2^7,所以共有7层,

根1左1右

后序与中序遍历的序列相反,说明所有结点均无左孩子

由于第i结点的左孩子下标为2i,

对于有n个结点的二叉树,它的高度不能确定,

最高为链表型,高为n;最低为完全二叉树,为1+log2n,向上取整

这篇关于11.3递归建二叉树,二叉树函数规范化输入输出,一些二叉树性质,求叶子结点与树的高度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/351479

相关文章

Python函数返回多个值的多种方法小结

《Python函数返回多个值的多种方法小结》在Python中,函数通常用于封装一段代码,使其可以重复调用,有时,我们希望一个函数能够返回多个值,Python提供了几种不同的方法来实现这一点,需要的朋友... 目录一、使用元组(Tuple):二、使用列表(list)三、使用字典(Dictionary)四、 使

PyTorch中cdist和sum函数使用示例详解

《PyTorch中cdist和sum函数使用示例详解》torch.cdist是PyTorch中用于计算**两个张量之间的成对距离(pairwisedistance)**的函数,常用于点云处理、图神经网... 目录基本语法输出示例1. 简单的 2D 欧几里得距离2. 批量形式(3D Tensor)3. 使用不

MySQL 字符串截取函数及用法详解

《MySQL字符串截取函数及用法详解》在MySQL中,字符串截取是常见的操作,主要用于从字符串中提取特定部分,MySQL提供了多种函数来实现这一功能,包括LEFT()、RIGHT()、SUBST... 目录mysql 字符串截取函数详解RIGHT(str, length):从右侧截取指定长度的字符SUBST

mysql递归查询语法WITH RECURSIVE的使用

《mysql递归查询语法WITHRECURSIVE的使用》本文主要介绍了mysql递归查询语法WITHRECURSIVE的使用,WITHRECURSIVE用于执行递归查询,特别适合处理层级结构或递归... 目录基本语法结构:关键部分解析:递归查询的工作流程:示例:员工与经理的层级关系解释:示例:树形结构的数

Kotlin运算符重载函数及作用场景

《Kotlin运算符重载函数及作用场景》在Kotlin里,运算符重载函数允许为自定义类型重新定义现有的运算符(如+-…)行为,从而让自定义类型能像内置类型那样使用运算符,本文给大家介绍Kotlin运算... 目录基本语法作用场景类对象数据类型接口注意事项在 Kotlin 里,运算符重载函数允许为自定义类型重

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的