【代码随想录】【算法训练营】【第17天】 [110]平衡二叉树 [257]二叉树的所有路径 [404]左叶子之和

前言

思路及算法思维,指路 代码随想录。
题目来自 LeetCode。

day 17,又是一个令人愉快的周五~

题目详情

[110] 平衡二叉树

题目描述

110 平衡二叉树
110 平衡二叉树

解题思路

前提:平衡二叉树:左右子树高度差不超过1,
思路:从平衡二叉树定义上,可以看出判断平衡二叉树的方法是后序遍历各个结点高度差。
重点:平衡二叉树的判断。

代码实现

C语言
后序遍历计算高度, 递归
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/int maxFun(int a, int b)
{return (a > b) ? a : b;
}int absFun(int a, int b)
{return (a > b) ? (a - b) : (b - a);
}int countHight(struct TreeNode *root)
{if (root == NULL){return 0;}// 计算左右子树高度int leftHight = countHight(root->left);if (leftHight < 0){return -1;}int rightHight = countHight(root->right);if (rightHight < 0){return -1;}// 判断左右子树是否为平衡二叉树if (abs(leftHight - rightHight) > 1){return -1;}return 1 + maxFun(leftHight, rightHight);
}bool isBalanced(struct TreeNode* root) {return (countHight(root) < 0) ? false : true;
}

[257] 二叉树的所有路径

题目描述

257 二叉树的所有路径
257 二叉树的所有路径

解题思路

前提:二叉树的路径,就是从根节点到叶子结点的路径
思路:前序遍历
重点:递归回溯过程中的结点路径的保存。

代码实现

C语言
先序遍历 递归回溯 + sprintf
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
/*** Note: The returned array must be malloced, assume caller calls free().*/// 先序遍历
void travesal(struct TreeNode *root, char **result, int *returnSize, int *nums, int idx)
{if (root == NULL){return ;}// 中nums[idx++] = root->val;if ((root->left == NULL) && (root->right == NULL)){// 遍历到叶子结点,输出路径(*returnSize)++;char *path = (char *)malloc(sizeof(char) * 1001);int len = 0;for (int i = 0; i < idx; i++){if (i != (idx - 1)){len += sprintf(path + len, "%d->", nums[i]);}else{len += sprintf(path + len, "%d", nums[i]);}}result[(*returnSize) - 1] = path;}else{// 未遍历到有叶子结点,继续向子节点遍历// 左travesal(root->left, result, returnSize, nums, idx);// 右travesal(root->right, result, returnSize, nums, idx);}return ;
}char** binaryTreePaths(struct TreeNode* root, int* returnSize) {*returnSize = 0;char **result = (char **)malloc(sizeof(char *) * 1001);int nums[1001];int idx = 0;travesal(root, result, returnSize, nums, idx);return result;
}

[404] 左叶子之和

题目描述

404 左叶子之和
404 左叶子之和

解题思路

前提:所求为左叶子结点的值的和
思路:遍历结点,找到所有叶子结点,且为左结点。
重点:左叶子结点的父节点,可能是右结点。

代码实现

C语言
先序,递归:标识左右结点
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/int travesal(struct TreeNode *node, bool isLeft)
{int leftSum = 0;if (node == NULL){return 0;}// 叶子结点的判断if ((node->left == NULL) && (node->right == NULL)){if (isLeft == true){leftSum =  node->val;}}// 非叶子结点// 左leftSum += travesal(node->left, true);// 右leftSum += travesal(node->right, false);return leftSum;
}int sumOfLeftLeaves(struct TreeNode* root){return travesal(root, false);
}
递归: 通过父节点判断是否为左叶子结点
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/int travesal(struct TreeNode *node)
{int leftSum = 0;int rightSum = 0;if ((node == NULL) || ((node->left == NULL) && (node->right == NULL))){return 0;}// 判断是否为左叶子结点,通过父节点实现判断if ((node->left != NULL) && (node->left->left == NULL) && (node->left->right == NULL)){leftSum = node->left->val;}else{// 非左叶子结点//左leftSum = travesal(node->left);}//右rightSum = travesal(node->right);return leftSum + rightSum;
}int sumOfLeftLeaves(struct TreeNode* root){return travesal(root);
}

今日收获

  1. 平衡二叉树的判断;
  2. 二叉树路径的输出。

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

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

相关文章

短视频商城全套源码:开启电商新纪元

随着数字媒体的快速发展&#xff0c;短视频平台已经成为人们获取信息、娱乐和社交的重要渠道。在这样一个大背景下&#xff0c;短视频商城的兴起&#xff0c;无疑为电商行业带来了新的机遇和挑战。本文将探讨短视频商城全套源码的重要性&#xff0c;以及它如何助力商家和开发者…

并发编程常见面试题

文章目录 为什么要使用线程池为什么不建议使用 Executors静态工厂构建线程池synchronized的实现原理Synchronized和Lock的区别什么是AQS什么是阻塞队列 为什么要使用线程池 关于线程池的作用和线程池的执行流程参考&#xff1a;java线程池 为什么不建议使用 Executors静态工厂…

云HIS医院信息管理系统源码(二级、乡镇、民营医院):云HIS系统与传统HIS系统的不同

云HIS医院信息管理系统源码&#xff08;二级、乡镇、民营医院&#xff09;&#xff1a;云HIS系统与传统HIS系统的不同 什么是医疗SaaS软件平台&#xff1f; HIS-SaaS&#xff08;Hospital Information System Software as a Service&#xff09;是一种医院信息系统的服务模式&…

引领数字创作新潮流——Autodesk Maya 2025 for Mac/win

作为全球领先的三维动画和视觉特效软件&#xff0c;Autodesk Maya 2025 引领着数字创作的新潮流。无论是电影、游戏、电视剧还是虚拟现实项目&#xff0c;Maya 2025 都是创作者们不可或缺的强大工具。 Maya 2025 在功能上持续创新&#xff0c;提供了一系列强大的工具和功能&am…

【网络与并发编程】

网络与并发编程 1. 网络编程1.1 网络基础知识1.1.1 什么是网络1.2.3 网络功能1.2.3 网络分类1.2.4 网络性能衡量指标1.2.5 网络编程中的几个关键概念1.2.6 网络通信要解决的问题1.2.7 网络通信协议1.1.8 网络通信标准1.1.9 通信地址 1.2 UDP 传输方法1.2.1 套接字简介1.2.2 UDP…

【全开源】智能名片系统源码(Fastadmin+ThinkPHP和Uniapp)

数字时代的新名片&#xff0c;连接未来的桥梁 引言 在数字化浪潮的推动下&#xff0c;传统名片已经逐渐淡出人们的视线。取而代之的是智能名片系统&#xff0c;它以其高效、便捷和智能化的特点&#xff0c;成为了商务交流的新宠。而智能名片系统源码&#xff0c;作为其核心驱…

SAP销售手工发票录入

销售手工发票录入用于处理未启用 SD 模块标准处理流程的零星销售业务。 科目设置 收入类科目&#xff1a;设置税务类型&#xff0c;允许含税/不含税过账应收账款: 留空。其他应收款的设置类似 编辑选项设置 在中国&#xff0c;编辑选项一般设置为基于总额计税。使用事务码 FB…

操作系统课程实验3-可变分区存储管理

操作系统课程实验3-可变分区存储管理 一、实验介绍 1.1 实验目的 加深对可变分区存储管理的理解&#xff1b;提高用C语言编制大型系统程序的能力&#xff0c;特别是掌握C语言编程的难点&#xff1a;指针和指针作为函数参数&#xff1b;掌握用指针实现链表和在链表上的基本操作…

如何设计足够可靠的分布式缓存体系,以满足大中型移动互联网系统的需要?no.31

传统 CAP 的突破 随着分布式系统的不断演进&#xff0c;会不断遇到各种问题&#xff0c;特别是当前&#xff0c;在大中型互联网系统的演进中&#xff0c;私有云、公有云并行发展且相互融合&#xff0c;互联网系统的部署早已突破单个区域&#xff0c;系统拓扑走向全国乃至全球的…

新书推荐:6.2 else if语句

本节必须掌握的知识点&#xff1a; 示例代码二十 代码分析 汇编解析 ■if语句表达形式3 if(表达式1) statement1 else if(表达式2) statement2 else if(表达式3) statement3 …… else statementN 解析&#xff1a; 如果表达式1非0&#xff0c;则执行statement1&#…

记录github小程序短视频系统的搭建过程

GitHub - lkmc2/AwesomeVideoWxApp: 《倾心短视频》微信小程序 这个项目按readme中的来可以部署成功&#xff0c;但是会发现图片、视频全是空的&#xff0c;如下图&#xff1a; 修改源代码&#xff0c;更换图片上传与保存地址 大概涉及到这些代码块&#xff0c;进行更改即可。…

什么样的数据摆渡设备,可以满足不同网间数据的安全传输需求?

数据摆渡设备是用来在不同的网络环境间安全地传输数据的硬件或软件解决方案。它们通常用于确保在具有不同安全级别的网络&#xff08;如内网和外网&#xff09;之间进行数据交换时的安全性和合规性。以下是一些常见的数据摆渡设备和方法&#xff1a; 移动介质拷贝&#xff1a;使…

生产制造边角料核算说明及ODOO演示

今天群里有伙伴提到边角料的处理问题&#xff0c;我们梳理了一下&#xff0c;在生产过程中&#xff0c;如果产生了边角料&#xff0c;核算产成品的投料成本时需要考虑边角料的价值&#xff0c;以确保成本核算的准确性。以下是注意的几点&#xff1a; 一、边角料的入账价值 在生…

OSPF路由聚合

原理概述 与RIP不同&#xff0c;OSPF不支持自动路由聚合&#xff0c;仅支持手动路由聚合。OSPF的路由聚合有两种机制&#xff1a;区域间路由聚合和外部路由聚合。区域间路由聚合必须配置在ABR路由器上&#xff0c;指的是ABR在把与自己直接相连区域&#xff08;Area&#xff09…

K8s 二进制部署---下篇(多master节点 负载均衡 高可用)

一 master02 节点部署 master01192.168.11.5kube-apiserver&#xff0c;kube-controller-manager&#xff0c;kube-scheduler&#xff0c;etcdmaster02192.168.11.12kube-apiserver&#xff0c;kube-controller-manager&#xff0c;kube-scheduler&#xff0c;etcdnode01192.1…

RHEL7及之后系统 系统服务脚本(Rocky 9.4)

目录 源码安装 准备工作 步骤1: 下载软件 步骤2: 安装apr 步骤3: 安装apr-util 步骤4: 安装Apache HTTP Server 总结步骤 后续步骤 源码安装 准备环境&#xff1a;首先&#xff0c;确保你的系统中安装了必要的编译工具和依赖库。对于C/C程序&#xff0c;这通常包括编译器&#…

一阶数字高通滤波器

本文的主要内容包含一阶高通滤波器公式的推导和数字算法的实现以及编程和仿真 1 计算公式推导 1.1.2 算法实现及仿真 利用python实现的代码如下&#xff1a; import numpy as np # from scipy.signal import butter, lfilter, freqz import matplotlib.pyplot as plt #2pifW…

从原理上解决 uniapp (含第三方插件)打包 iOS APP 失败的问题

最近一段时间&#xff0c;我的团队基于uniapp开发的平台型APP因平台资金合规的要求&#xff0c;需要对接中金支付&#xff0c;uniapp的插件市场有一个别人做好的中金支付插件&#xff0c;但前端开发同事在引用这个 插件时&#xff0c;出现了 iOS APP 打包不成功的情况&#xff…

Pantera 合伙人简谈 Morpho:更高效、适应性更强的 DeFi 解决方案

原文标题&#xff1a;《Pioneering Peer-to-Peer Lending in the DeFi Revolution》撰文&#xff1a;Pantera Capital 合伙人 Paul Veradittakit编译&#xff1a;Chris&#xff0c;Techub News 文章来源&#xff1a;香港Web3媒体Techub News Morpho 正在超越 Compound 等传统…

Redis主从、哨兵、cluster集群的部署和细节

目录 1. 主从模式 为什么需要主从&#xff1f; 搭建主从架构 2. Sentinel(哨兵)模式 为什么需要哨兵模式&#xff1f; 搭建哨兵集群 哨兵集群 Go语言编程redis哨兵模式 有了哨兵&#xff0c;客户端连接谁&#xff1f; test1&#xff1a;redis节点主从切换 test2&am…