当前位置: 首页 > news >正文

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

今日内容

  •  110.平衡二叉树 
  •  257. 二叉树的所有路径 
  •  404.左叶子之和

110.平衡二叉树 - Easy

题目链接:. - 力扣(LeetCode)

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

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

思路:递归法,注意区分深度和高度

class Solution {
public:// 返回以该节点为根节点的二叉树的高度,如果不是平衡二叉树了则返回-1int getHeight(TreeNode* node) {if (node == NULL) {return 0;}int leftHeight = getHeight(node->left);if (leftHeight == -1) return -1;int rightHeight = getHeight(node->right);if (rightHeight == -1) return -1;return abs(leftHeight - rightHeight) > 1 ? -1 : 1 + max(leftHeight, rightHeight);}bool isBalanced(TreeNode* root) {return getHeight(root) == -1 ? false : true;}
};

257. 二叉树的所有路径 - Easy

题目链接:力扣-257. 二叉树的所有路径

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

叶子节点 是指没有子节点的节点。

思路:递归法,其实实现的是回溯

class Solution {
private:void traversal(TreeNode* cur, vector<int>& path, vector<string>& result) {path.push_back(cur->val); // 中,中为什么写在这里,因为最后一个节点也要加入到path中 // 这才到了叶子节点if (cur->left == NULL && cur->right == NULL) {string sPath;for (int i = 0; i < path.size() - 1; i++) {sPath += to_string(path[i]);sPath += "->";}sPath += to_string(path[path.size() - 1]);result.push_back(sPath);return;}if (cur->left) { // 左 traversal(cur->left, path, result);path.pop_back(); // 回溯}if (cur->right) { // 右traversal(cur->right, path, result);path.pop_back(); // 回溯}}public:vector<string> binaryTreePaths(TreeNode* root) {vector<string> result;vector<int> path;if (root == NULL) return result;traversal(root, path, result);return result;}
};

404.左叶子之和 - Easy

题目链接:力扣-404. 左叶子之和

给定二叉树的根节点 root ,返回所有左叶子之和。 

思路:递归法 

class Solution {
public:int sumOfLeftLeaves(TreeNode* root) {if (root == NULL) return 0;if (root->left == NULL && root->right== NULL) return 0;int leftValue = sumOfLeftLeaves(root->left);    // 左if (root->left && !root->left->left && !root->left->right) { // 左子树就是一个左叶子的情况leftValue = root->left->val;}int rightValue = sumOfLeftLeaves(root->right);  // 右int sum = leftValue + rightValue;               // 中return sum;}
};

今日总结

第一题注意区分高度和深度,第二题回溯搞得不是很明白

 

 

 

 

 

 

 

 

 

http://www.lryc.cn/news/278951.html

相关文章:

  • ubuntu20.04网络问题以及解决方案
  • Java面试题(java高级面试题)
  • 【MIdjourney】关于图像中人物视角的关键词
  • 433. 最小基因变化(Queue使用ArrayList和LinkedList进行声明)
  • MYSQL双主节点–更换ip
  • 一文玩转Go语言中的面向对象编程~
  • kylin集群反向代理(健康检查)
  • 【docker】centos7安装harbor
  • 2024 年 1 月安全更新修补了 58 个漏洞(Android )
  • 数据库系统概念 第七版 中文答案 第3章 SQL介绍
  • 什么是数通技术?以太网交换机在数通技术中的精要
  • php 的数学常用函数
  • Netty-Netty组件了解
  • 银行的压力测试如何进行?
  • QtService、托盘程序使用
  • 使用Linux防火墙管理HTTP流量
  • 图鸟引入多套字体图标的方式教程
  • 在openEuler环境下快速编译GreatSQL RPM包
  • C语言基础语法跟练 day3
  • 【控制篇 / 策略】(7.4) ❀ 01. IP地理位置数据库和地理地址对象 ❀ FortiGate 防火墙
  • NX二次开发点通过云配准获取相同体
  • 5.4 Android BCC环境搭建(eadb版 下)
  • 【AI视野·今日Robot 机器人论文速览 第七十四期】Wed, 10 Jan 2024
  • 服务端性能测试——性能测试工具JMeter-L1
  • C# OpenCvSharp DNN FreeYOLO 目标检测
  • U盘启动安装win11遇到缺少计算机所需的介质驱动程序问题
  • 正则表达式、文件访问(Python实现)
  • ES高级查询
  • RT-Thread入门笔记6-空闲线程及两个常用的钩子函数
  • 网络正常运行时间监控工具