E : DS查找—二叉树平衡因子

Description

二叉树用数组存储,将二叉树的结点数据依次自上而下,自左至右存储到数组中,一般二叉树与完全二叉树对比,比完全二叉树缺少的结点在数组中用0来表示。

计算二叉树每个结点的平衡因子,并按后序遍历的顺序输出结点的平衡因子。

–程序要求–

若使用C++只能include一个头文件iostream;若使用C语言只能include一个头文件stdio.h

程序中若include多过一个头文件,不看代码,作0分处理

不允许使用第三方对象或函数实现本题的要求

Input

测试次数t

每组测试数据一行,数组元素个数n,后跟n个字符,二叉树的数组存储。

Output

对每组测试数据,按后序遍历的顺序输出树中结点的平衡因子(测试数据没有空树)

 思路:

        首先先要理解平衡因子的概念http://t.csdnimg.cn/RErze,推荐文章,有图文讲解很详细。

简单来说就是 平衡因子 = 左子树深度 - 右子树深度(当前节点)。

分配内存这里是把它补成满二叉树,然后就可以对数组直接进行操作

因为二叉树的结点数据依次自上而下,自左至右存储到数组中,可以在数组中直接操作

arr[0] 的左孩子是 arr[1*2 + 1]         右孩子是 arr[1*2 + 2];

arr[n] 的左孩子:arr[2*n + 1]          右孩子:arr[2*n + 2];

output函数进行递归并且输出结果。

主函数调用output();在类的public里面,传入参数0,数组的第0位,即二叉树的根节点。

左子树高度减去右子树高度即为输出结果。

 AC代码:

#include <iostream>
using namespace std;

// 二叉树类定义
class BinaryTree {
public:
    char* arr;  // 数组用于存储二叉树节点
    int n;      // 二叉树节点数
    int a;      // 数组大小,以容纳二叉树节点

    // 构造函数,用于初始化具有给定节点数的二叉树
    BinaryTree(int numNodes) {
        allocateMemory(numNodes);
    }

    // 析构函数,释放动态分配的内存
    ~BinaryTree() {
        delete[] arr;
    }

    // 初始化二叉树,将叶节点的值设置为 '0'
    void init() {
        for (int i = n; i < a; i++) {
            arr[i] = '0';
        }
    }

    // 输出二叉树结构和高度差
    void output() {
        output(0);
    }

    // 根据节点数分配二叉树数组的内存
    void allocateMemory(int numNodes) {
        n = numNodes;
        a = 2;
        while (a / 2 < n) {
            a *= 2;
        }
        arr = new char[a + 3];
    }

    // 计算指定节点的高度
    int height(int node) {
        if (arr[node] == '0') return 0;
        return height(node * 2 + 1) > height(node * 2 + 2) ? height(node * 2 + 1) + 1 : height(node * 2 + 2) + 1;
    }

    // 递归输出二叉树结构和高度差
    void output(int node) {
        if (arr[node] == '0') return;
        output(node * 2 + 1);
        output(node * 2 + 2);
        cout << arr[node] << " " << height(node * 2 + 1) - height(node * 2 + 2) << endl;
    }
};

int main() {
    int t;
    cin >> t;

    while (t--) {
        int n;
        cin >> n;
        BinaryTree p(n);
        for (int i = 0; i < n; i++) {
            cin >> p.arr[i];
        }
        p.init();
        p.output();
    }

    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mybatisX自动生成sql语句,尝试测试方法报错

今天我使用mybatisx自定义mapper方法生成sql语句后&#xff0c;在测试时报错 错误是MyBatis 无法找到映射的语句&#xff08;Statement&#xff09;引起的 我是这样操作的&#xff0c;在mapper接口自定义了一个方法 然后alt加enter&#xff0c;自动生成sql 结果 mapper.xml文件…

31.Java程序设计-基于Springboot的鲜花商城系统的设计与实现

引言 背景介绍&#xff1a;鲜花商城系统的兴起和发展。研究目的&#xff1a;设计并实现一个基于Spring Boot的鲜花商城系统。论文结构概述。 文献综述 回顾相关鲜花商城系统的设计与实现。分析不同系统的优缺点。强调Spring Boot在系统设计中的优越性。 系统设计 需求分析 用户…

css中sprite(css精灵)是什么,有什么优缺点

概念 将多个小图片拼接到一个图片中 。通过 background-position 和元素尺寸调节需要显示的背景图案。 优点 减少 HTTP 请求数&#xff0c;极大地提高页面加载速度 增加图片信息重复度&#xff0c;提高压缩比&#xff0c;减少图片大小 更换⻛格方便&#xff0c; 只需在一张或…

mysql保姆安装教程

一.下载install文件 1.进入Mysql官网&#xff0c;点击下载 2.选择MySQL Installer for Windows 3.推荐选择第二个安装包 4.不登陆&#xff0c;开始下载 5.等待下载完成 二.安装前的配置 通过电脑“设置”&#xff0c;检查电脑是否包含中文名&#xff0c;如果包含请重命名 …

生活常识-如何开社保证明(四川)

下载并打开天府市民云APP 注册后登陆 点击社保服务 点击社保证明 点击【四川省社会保险个人社保证明名(近24个月)】 点击下载 下载后点击【QQ发送给好友&#xff0c;然后发送给自己的电脑设备(我的电脑)】

通过C++程序实现光驱的自动化刻录和读取

文章目录 ISO文件格式光盘的基本概念光盘种类特点DVDR光盘使用windows调用Linux调用Linux平台下用到的C库:读取设备驱动列表向光驱中写文件 数字存储媒体快速发展的今天&#xff0c;光驱的使用已经不像以前那样普及了。但是在数据备份、安装软件和操作系统、旧设备兼容等领域还…

LTPI协议的理解——LTPI协议的定义和结构

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 LTPI协议的理解——LTPI协议的定义和结构 定义DC-SCM 2.0 LTPI 结构GPIO通道I2C/SMBus通道Uart通道OEM通道数据通道 总结 定义 LTPI (LVDS Tunneling Protocol & Interf…

算法基础之计数问题

计数问题 核心思想&#xff1a; 数位dp / 累加 累加 ​ 分情况讨论 &#xff1a; xxx 000 ~ abc –1 yyy 000 ~ 999 共 abc * 1000 种 特别地&#xff0c;当枚举数字0时 (找第4位为0的数) 前三位不能从000开始了 否则没这个数不合法(有前导零) xxx abc 2.1. d < 1 , 不…

拥抱健康,远离内耗:程序员必备的情绪管理策略

程序员是一群特别脆弱的群体&#xff0c;俗称IT民工&#xff01; 每天上班要跟产品斗智斗勇&#xff0c;还要跟bug斗的难解难分&#xff0c;另外还要被领导批&#xff0c;跟同事扯皮&#xff0c;整个一天下来常常筋疲力尽。 程序员大多不善言语&#xff0c;受了委屈往往喜欢吞到…

抓包工具Charles安装及使用

Charles 介绍 Charles 是在 Mac 下常用的网络封包截取工具&#xff0c;在做 移动开发时&#xff0c;我们为了调试与服务器端的网络通讯协议&#xff0c;常常需要截取网络封包来分析。 Charles 通过将自己设置成系统的网络访问代理服务器&#xff0c;使得所有的网络访问请求都…

GameFi 2024年或将迎来新的爆发!

在数字时代&#xff0c;游戏已经不仅仅是一种娱乐方式&#xff0c;更是一种跨越现实和虚拟界限的全球性文化现象。而游戏金融&#xff08;GameFi&#xff09;正是这场数字革命的下一个巨大风潮。 随着科技的不断发展和创新&#xff0c;2024年&#xff0c;GAMEFI&#xff08;Gam…

购买腾讯云服务器需要多少钱?购买腾讯云服务器方法教程

腾讯云轻量应用服务器购买指南&#xff0c;有两个入口&#xff0c;一个是在特价活动上购买&#xff0c;一个是在轻量应用服务器官方页面购买&#xff0c;特价活动上购买价格更便宜&#xff0c;轻量2核2G3M带宽服务器62元一年起&#xff0c;阿腾云atengyun.com分享腾讯云轻量应用…

【最新报道】初窥Windows AI 工作室

自我介绍 做一个简单介绍&#xff0c;酒研年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

Python+OpenCV 零基础学习笔记(6):ROI

文章目录 相关链接运行环境前言ROI颜色区域分割颜色通道合并 相关链接 【2022B站最好的OpenCV课程推荐】OpenCV从入门到实战 全套课程 CSDN标题里个括号对应视频的分P OpenCVPython CSDN专栏 Gitee 项目地址 运行环境 Python:3.11.5Anaconda:23.7.4IDE:vscode运行环境&#x…

three.js 模型 居中

物体不居中 模型的几何中心位置不对&#xff0c; 设置偏离物体实际几何中心&#xff0c;当设置position&#xff08;0,0,0&#xff09;时就会出现偏离。 解决方案 此处有两种解决方案 建模师处理模型&#xff0c;将模型的几何中心移动到&#xff08;0&#xff0c; 0&#…

数据集介绍【02】CIFAR10

CIFAR10数据集共有60000个样本&#xff0c;每个样本都是一张32*32像素的RGB图像&#xff08;彩色图像&#xff09;&#xff0c;每个RGB图像又必定分为3个通道&#xff08;R通道、G通道、B通道&#xff09;。这60000个样本被分成了50000个训练样本和10000个测试样本。 CIFAR10数…

使用terraform 来创建GCP的instance template 和基于它的vm

本人在上一篇的文章中已经介绍了如何去创建 google cloud的 vm 的image 和 instance template了 url&#xff1a; 快速构建自定义配置好的VM - 使用GCP instance-template 和 custom-image 但是里面的操作是基于gcloud CLI的。 在实际项目上&#xff0c; 我们对google cloud …

Mysql For Navicate (老韩)

Navicate创建数据库 先创建一个数据库;然后在数据库中创建一张表;在表格当中填入相应的属性字段;打开表, 然后填入相应的实例字段; – 使用数据库图形化App和使用指令来进行操作各有各的好处和利弊; 数据库的三层结构(破除MySQL神秘) 所谓安装Mysql数据库, 就是在主机安装一…

树莓派界面改成中文

安装完树莓派系统(Raspberry Pi OS with Desktop)&#xff0c;第一次启动时&#xff0c;时会有如下面二个图所示&#xff0c;让你选择区域时区和语言。 树莓派默认的语言为英文&#xff0c;如果你在安装时没有选择的话&#xff0c;默认的区域为英国&#xff0c;语言为英国英文&…

java数据结构与算法刷题-----LeetCode 680. 验证回文串 II

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 思路&#xff1a;双指针 详情见代码注释 class Solution {//贪心双指针&a…