代码随想录训练营-15day:二叉树4

一、平衡二叉树

平衡二叉树的定义:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

使用递归方式:首先需要知道高度是什么意思,怎么获取高度。如果高度差大于1了,那么回复高度就没有意义了。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
int getHight(struct TreeNode* root)//得到左右子树的高度差
{if(root == NULL){return 0;}int left_len = getHight(root->left);if(left_len == -1) return -1;int right_len = getHight(root->right);if(right_len == -1) return -1;return  abs(right_len - left_len) > 1? -1 : 1 + (right_len > left_len? right_len : left_len);
}bool isBalanced(struct TreeNode* root) {if(root == NULL){return true;}int len = getHight(root);return len == -1? false : true;
}

二、二叉树所有路径

主要是理解递归+回溯的思路,每一次递归之后,需要回退,把路径搜索完成,遍历一个完整的路径。解答过程遇到两个方面的问题:

1 就是打印函数,sprintf使用不当,导致保存出错;之前使用的数字转字符函数和strcat,没使用成功;

2 就是c语言写法,需要传入top在里面,因此按照代码随想录的思路,先把value入栈,top在递归过程,会变化,导致元素缺失,因此需要把入栈操作放到判断左右子树的条件里面。

#define ARRNUM 101
void trans(struct TreeNode* curNode, char** result, int* stk, int* returnSize, int top)
{ //stk[top++] = curNode->val;//stack push//printf(" %d -> %d\n", top, stk[top]);// if(curNode == NULL)//   return;if(curNode->left == NULL && curNode->right == NULL){int len = 0;for(int i = 0; i < top; i++)//top is "0" index start{len += sprintf(result[(*returnSize)] + len, "%d->", stk[i]);//printf("val = %d\n",stk[i]);}//printf("top = %d\n", top);sprintf(result[(*returnSize)] + len, "%d", curNode->val);(*returnSize)++;//push到resultreturn;}if(curNode->left){stk[top++] = curNode->val;trans(curNode->left, result, stk, returnSize, top);--top;//value stack pop//printf("/top = %d\n", top);}if(curNode->right){stk[top++] = curNode->val;trans(curNode->right, result, stk, returnSize, top);--top;//value stack pop//printf("//top = %d\n", top);}}
char** binaryTreePaths(struct TreeNode* root, int* returnSize) {/**定义字符数组**/char** result = (char**)malloc(sizeof(char*) * ARRNUM);//定义100个字符串for(int i = 0; i < ARRNUM; i++){result[i] = (char*)malloc(ARRNUM);//每个字符串定义100长度}*returnSize = 0;if(root == NULL)return result;/**定义保存节点值的数组模拟栈**/int* stack = (int*)malloc(sizeof(int) * 1024);int top = 0;//栈的位置trans(root, result, stack, returnSize, top);return  result;
}

三、左叶子之和

重点是理解左叶子节点的含义:节点A的左孩子不为空,且左孩子的左右孩子都为空(说明是叶子节点),那么A节点的左孩子为左叶子节点(代码随想录的解释)

int sumOfLeftLeaves(struct TreeNode* root){//递归出口if(root == NULL)return 0;if(root->left == NULL && root->right == NULL)//没有左y右子树, 不存在左叶子节点return 0;int leftvalue = sumOfLeftLeaves(root->left);if(root->left && root->left->left == NULL && root->left->right ==NULL){leftvalue = root->left->val;//保存当前叶子节点的值}//右子树的左叶子节点int rightvalue = sumOfLeftLeaves(root->right);return leftvalue + rightvalue;
}

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

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

相关文章

Hotcoin4月16日上新热门资产:头部RWA技术提供方Centrifuge(CFG)

Hotcoin持续为全球600万用户发掘优质潜力资产&#xff0c;热门币种交易上热币。一文快速了解今日上新资产:Centrifuge(CFG) 推荐指数 8.2 交易对 CFG/USDT 交易时间 4月16日 19:00 资产赛道 RWA 项目简介 Centrifuge是一个去中心化资产融资协议&#xff0c;专注于释放现实世界资…

leetcode刷题(python)——(三)

01.02.02 练习题目&#xff08;第 03 天&#xff09; 1. 0066. 加一 1.1 题目大意 描述&#xff1a;给定一个非负整数数组&#xff0c;数组每一位对应整数的一位数字。 要求&#xff1a;计算整数加 1 1 1 后的结果。 说明&#xff1a; 1 ≤ d i g i t s . l e n g t h ≤…

网关模式和网桥模式的区别

网关&#xff0c;大家都知道&#xff0c;从一个房间走到另一个房间&#xff0c;必然要经过一扇门。同样&#xff0c;从一个网络向另一个网络发送信息&#xff0c;也必须经过一道“关口”&#xff0c;这道关口就是网关。顾名思义&#xff0c;网关(Gateway)就是一个网络连接到另一…

Object.hasOwn is not a function

背景 开发一个H5页面,使用Object.hasOwn来测试属性是否存在,在error监控中,发现某些用户访问会出现如下报错: 问题分析 因为不是所有的用户都报错,继而先去mdn上查看这个api的浏览器兼容性: Object.hasOwn() - JavaScript | MDN 从【Can I Use】上也查看了此web技术的…

STM32串口通信

一、串口发送 1.初始化引脚 void Serial_Init(uint32_t BaudRate) {RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA ,ENABLE );RCC_APB2PeriphClockCmd (RCC_APB2Periph_USART1 ,ENABLE );GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP…

[疑难杂症2024-003]如何判断一张没有头信息的dcm图像,是否是压缩图像?

本文由Markdown语法编辑器编辑完成&#xff0e; 1. 前言: DCM格式&#xff0c;是医学图像领域里面的通用格式&#xff0e;DCM图像一般分为两大部分&#xff0c;一部分是TAG信息&#xff0c;一部分是像素. 而TAG信息&#xff0c;一般又会分为两部分&#xff0c;如下图所示, 是…

C++_智能指针

文章目录 前言一、智能指针原理二、库支持的智能指针类型1.std::auto_ptr2.std::unique_ptr3.std::shared_ptr4.std::weak_ptr 三、删除器总结 前言 智能指针是一种采用RAII思想来保护申请内存不被泄露的方式来管理我们申请的内存&#xff0c;对于RAII&#xff0c;我们之前也已…

LeetCode-热题100:102. 二叉树的层序遍历

题目描述 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a; root [3,9,20,null,null,15,7] 输出&#xff1a; [[3],[9,20],[15,7]] 示例 2&am…

【GEE实践应用】使用MODIS NDVI数据集绘制研究区域每日NDVI序列曲线

// 设置研究区域 var geometry table;// 选择MODIS NDVI 数据集 var modisNDVI ee.ImageCollection(MODIS/006/MOD13A2).filterBounds(geometry).filterDate(2000-01-01, 2023-12-31);// 计算每天的平均 NDVI var dailyMeanNDVI modisNDVI.map(function(image) {var date e…

AndroidStudio AGP 7+, 编译aar并输出到本地仓库

1 编写构建gradle脚本代码 1.1 配置publication和repository 在指定moudle目录下新建名为"maven-publish.gradle"文件&#xff0c;其声明的publication和repository如下所示&#xff1a; apply plugin: maven-publish// This creates a task called publishReleas…

# 从浅入深 学习 SpringCloud 微服务架构(二)模拟微服务环境

从浅入深 学习 SpringCloud 微服务架构&#xff08;二&#xff09;模拟微服务环境&#xff08;1&#xff09; 段子手168 1、打开 idea 创建父工程 创建 artifactId 名为 spring_cloud_demo 的 maven 工程。 --> idea --> File --> New --> Project --> Ma…

记录一个sentinel修改密码方法

docker run --name sentinel --restartalways -p 8858:8858 -d bladex/sentinel-dashboard 使用docker装了sentinel&#xff0c;公司不允许使用默认密码。 使用docker exec -it sentinel /bin/bash进入容器内 在app.jar所在目录下创建application.properties的配置文件 # I…

MongoDB学习【三】MongoDB基本操作命令

1. 启动MongoDB服务&#xff1a; 在Windows环境下&#xff0c;通常你可以通过命令提示符(cmd)来启动MongoDB服务。首先确保已经正确设置了--dbpath参数指向数据库文件存储的位置&#xff0c;然后执行mongod服务程序&#xff1a; mongod --dbpath D:\mongo在Linux系统中&#…

java高校办公室行政事务管理系统设计与实现(springboot+mysql源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的闲一品交易平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于mvc的高校办公室行政…

Unity 网络连接协议总结

Tcp同步连接 Tcp同步连接介绍 Tcp协议作为稳定协议,在消息发送前必须完成客户端连接,且客户端连接在Tcp协议中只能是一对一的,即如果有ABC三个连接,那个A连接与B连接如果相互连接,则A与C之间则无法互相通信,只能由A接受到消息时创建出额外的D连接,然后由D与C相互通信 同步作为…

软件缺陷的生命周期

参考&#xff1a;Defect/Bug Life Cycle in Software Testing 什么是缺陷 软件缺陷一般被我们叫做Bug。对应的软件缺陷&#xff0c;就是我们所测试的程序中存在的无法正常运行或功能有相关缺陷。 IEEE729-1983对缺陷的标准定义&#xff1a; 从产品内部看&#xff0c;缺陷是…

Java强连通分量(含面试大厂题和源码)

强连通分量&#xff08;Strongly Connected Components, SCCs&#xff09;是图论中的一个概念&#xff0c;主要用于有向图。在有向图中&#xff0c;如果从图中的某个顶点 A 能够到达另一个顶点 B&#xff0c;并且从顶点 B 也能到达顶点 A&#xff0c;则称这两个顶点是强连通的。…

基于快照行情的股票/基金 1分钟 K 线合成指南

1. 概述 由于不同交易所不同资产的交易规则是有差异的&#xff0c;导致不同交易所基于快照行情或逐笔成交合成不同资产1分钟 K 线的计算方法是不同的。 本教程旨在提高 DolphinDB 在具体业务场景下的落地效率&#xff0c;降低 DolphinDB 在实际业务使用中的开发难度。 本教程…

C语言如何使⽤指针?

一、问题 指针变量在初始化以后就可以使⽤和参与操作了&#xff0c;那么就要⽤到对指针变量最常⽤的两个操作符——> * 和 &#xff06; 。 二、解答 这⾥⼜要提到始终贯穿着指针的⼀个符号“ * ”&#xff0c;但是这⾥的“ * ”是作为指针运算符使⽤的&#xff0c;叫做取内…

如何合理利用多个中国大陆小带宽服务器?

我们知道在中国大陆带宽单价非常昂贵&#xff0c;一个1Mbps 带宽的机子一年就得卖好几百人民币&#xff0c;这是不值当的&#xff0c;当然我们可以去低价漂阿里云、腾讯云的轻量服务器&#xff0c;99包年&#xff0c;但是带宽太小很难崩。 所以&#xff0c;我们必须构建一个能够…