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

news2024/11/23 9:27:49

建树 ,递归建树

输入为

建立树

递归

函数参数表为引用或指针

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,向上取整

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1174405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

标签识别中的数据泄露:关键分析

一、介绍 在数据驱动的决策时代&#xff0c;收集、处理和分析数据的过程在从医疗保健到金融&#xff0c;从营销到研究的各个领域都发挥着举足轻重的作用。数据分析的基本步骤之一是正确识别数据集中的标签或类别。然而&#xff0c;这项看似简单的任务可能充满挑战&#xff0c;尤…

springboot苍穹外卖实战:八、开发小程序准备工作+入门案例+小程序微信用户登录流程+商品浏览

开发小程序准备工作 官方网址&#xff1a;https://mp.weixin.qq.com/cgi-bin/wx?token&langzh_CN 1、微信小程序注册 注册地址&#xff1a;https://mp.weixin.qq.com/wxopen/waregister?actionstep1 2、 完善小程序信息 登录小程序后台&#xff1a;https://mp.weixin.…

前端框架Vue学习 ——(三)Vue生命周期

生命周期&#xff1a;指一个对象从创建到销毁的整个过程。 生命周期的八个阶段&#xff1a;每触发一个生命周期事件&#xff0c;会自动执行一个生命周期方法&#xff08;钩子&#xff09; mounted&#xff1a;挂载完成&#xff0c;Vue 初始化成功&#xff0c;HTML 页面渲染成功…

Linux学习第33天:Linux INPUT 子系统实验(二):Linux 自带按键驱动程序的使用

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 本节笔记主要内容是学会如何使用Linux自带的按键驱动程序。 一、自带按键驱动程序源码简析 配置选项路径如下&#xff1a; -> Device Drivers ->…

内存学习(3):DRAM的基础存储结构(存储层级、读写过程,刷新与暂存)

1 DRAM背景简介 DRAM&#xff0c;全称为 Dynamic Random Access Memory &#xff0c;中文名是“动态随机存取存储器”。所谓“动态”是和“静态”相对应的&#xff0c;芯片世界里还有一种 SRAM 静态随机存取存储器的存在。 笼统地说&#xff0c;DRAM 的结构比 SRAM 更简单&am…

UE5——源码阅读——2

这个是非常大的作用域&#xff0c;当程序离开这个东西&#xff0c;就会把它释放掉&#xff0c;设置了一个作用域把当前线程标记为主线程 插入了一个默认的Main,这个东西其实是标记点&#xff0c;这个标记是在UE内部有个性能分析工具可以看到这个标记点&#xff0c;主要是确定位…

【java学习—十三】处理流之三:标准输入输出流(3)

文章目录 1. 相关概念2. 举例与练习2.1. 举例2.2. 练习 1. 相关概念 System.in 和 System.out 分别代表了系统标准的输入和输出设备&#xff0c;默认输入设备是键盘&#xff0c;输出设备是显示器。     System.in 的类型是 InputStream     System.out 的类型是 PrintS…

SpringMvc从菜鸟到大拿完成蜕变

SpringMvc从菜鸟到大拿完成蜕 介绍 Why springmvc Servlet缺点: servlet中的service:方法一次只能处理一类请求;单拿用户表来说,得需要创建五个Servlet;在url中输入的是urlpattern;默认只访问service方法;如何减少Servlet的个数呢? 增加了一个method参数;其他人有可能会喜欢…

腾讯云CVM S5服务器优惠价格表,买一年送3个月

腾讯云服务器CVM标准型S5有活动&#xff0c;CVM 2核2G S5优惠价280.8元一年自带1M带宽&#xff0c;15个月313.2元、2核4G配置748.2元15个月、4核8G配置1437.24元15个月、8核16G优惠价3048.48元15个月&#xff0c;公网带宽可选1M、3M、5M或10M&#xff0c;腾讯云服务器网txyfwq.…

【算法练习Day39】单词拆分多重背包的介绍

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 单词拆分多重背包总结&…

[BUUCTF NewStar 2023] week5 Crypto/pwn

最后一周几个有难度的题 Crypto last_signin 也是个板子题&#xff0c;不过有些人存的板子没到&#xff0c;所以感觉有难度&#xff0c;毕竟这板子也不是咱自己能写出来的。 给了部分p, p是1024位给了922-101位差两头。 from Crypto.Util.number import * flag b?e 655…

Winform 实现俄罗斯方块游戏(一)

第一步&#xff0c;先用GDI绘制小正方形方块&#xff0c;其它形状的用这个方块合成 如何绘制一个方块&#xff1f;先绘制两个正方形&#xff0c;如下&#xff1a; 然后四周用梯形填充&#xff0c;内部颜色用渐变&#xff0c;这样更有立体感&#xff0c;下篇介绍如何实现。

D-link未授权访问以及远程代码执行

随便输入一个错误密码&#xff0c;会跳转到页面&#xff1a; /page/login/login.html?errorfail继续访问有效页面漏洞url&#xff1a; /Admin.shtml然后访问管理页面去更改管理密码 直接构造payload访问漏洞url&#xff1a; /cgi-bin/execute_cmd.cgi?cmdid执行命令&#…

2023年11月5日网规考试备忘

早上题目回忆&#xff1a; pki体系 ipsec&#xff0c;交换安全&#xff08;流量抑制&#xff09; aohdlc bob metclaf —ethernet pon tcp三次握手 OSPF lsa&#xff1f;交换机组ospf配置问题&#xff0c;ping网关可通&#xff0c;AB不通 raid6 300G*8 网络利用率 停等协议10…

腾讯云CVM S5服务器4核8G配置性能测评和优惠价格表

腾讯云4核8G服务器CVM标准型S5实例性能测评&#xff0c;包括CPU型号、内存、系统盘、CVM实例规格性能测评&#xff0c;腾讯云4核8G租用优惠价格表&#xff0c;腾讯云服务器网txyfwq.com分享腾讯云4核8G服务器CVM S5性能测评和优惠价格表&#xff1a; 腾讯云4核8G服务器CVM S5性…

dupeGuru 清理微信重复文件

本文摘录于&#xff1a;https://www.bilibili.com/video/BV13p4y1G75Y/?spm_id_from333.337.search-card.all.click&vd_source483e5c52353ea59d1a5eadac7737591a只是做学习备份之用&#xff0c;绝无抄袭之意&#xff0c;有疑惑请联系本人&#xff01; 微信用了七八年,文件…

Java异常你还没有了解吗?

&#x1f937;‍♀️&#x1f937;‍♀️&#x1f937;‍♀️ 今天和大家一起学习一下Java中的异常&#xff01; 清风的CSDN博客个人主页 &#x1f302;c/java领域新星创作者 &#x1f389;欢迎&#x1f44d;点赞✍评论❤️收藏 &#x1f61b;&#x1f61b;&#x1f61b;希望我…

【JavaScript】window 对象、location 对象、navigator 对象和 history 对象

1. window 对象 BOM (Browser Object Model ) 是浏览器对象模型&#xff1a; window对象是一个全局对象&#xff0c;也可以说是JavaScript中的顶级对象像document、alert()、console.log()这些都是window的属性&#xff0c;基本BOM的属性和方法都是window的所有通过var定义在全…

【Java 进阶篇】JSP 简单入门

在现代Web开发中&#xff0c;JavaServer Pages&#xff08;JSP&#xff09;是一项非常重要的技术。JSP允许开发者将Java代码嵌入HTML页面&#xff0c;以实现动态内容的生成和呈现。本文将详细介绍JSP的概念、原理以及如何使用JSP来构建Web应用程序。 第一部分&#xff1a;JSP …

基于Google Colaboratory安装Go语言编译器操作流程

文章目录 1. 什么是Google Colaboratory2. 访问Google Colaboratory3. 创建新的笔记本4.【方法①】使用apt命令安装golang5.【方法②】使用Go安装包安装golang6. 参考链接 1. 什么是Google Colaboratory Colab是一种托管的笔记本电脑服务&#xff0c;不需要安装即可使用&#x…