代码随想录算法训练营第十五天| 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和、 222.完全二叉树的节点个数

本文主要是介绍代码随想录算法训练营第十五天| 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和、 222.完全二叉树的节点个数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Leetcode110.平衡二叉树

题目链接:110. 平衡二叉树

C++:(后序遍历)

class Solution {
public:int getheight(TreeNode *node){if(node == nullptr) return 0;//左int leftheight = getheight(node->left);if(leftheight == -1) return -1;//右int rightheight = getheight(node->right);if(rightheight == -1) return -1;//中int result;if(abs(leftheight - rightheight) > 1)result = -1;else{result = 1 + max(leftheight, rightheight);}return result;}bool isBalanced(TreeNode* root) {return getheight(root) == -1 ? false : true;}
};

Python:

class Solution:def getheight(self, node):if node == None:return 0leftheight = self.getheight(node.left)if leftheight == -1:return -1rightheight = self.getheight(node.right)if rightheight == -1:return -1if abs(leftheight - rightheight) > 1:result = -1else:result = 1 + max(leftheight, rightheight)return resultdef isBalanced(self, root: Optional[TreeNode]) -> bool:return False if self.getheight(root) == -1 else True

Leetcode257. 二叉树的所有路径

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

C++:(回溯算法初体验)

注意:传入的形参为引用格式,递归+回溯成对出现

class Solution {
public:void findway(TreeNode* node, vector<int> &path, vector<string> &result){//中path.push_back(node->val);if(node->left == nullptr && node->right == nullptr){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(node->left != nullptr){findway(node->left, path, result);path.pop_back();  //回溯}//右if(node->right != nullptr){findway(node->right, path, result);path.pop_back();  //回溯}}vector<string> binaryTreePaths(TreeNode* root) {vector<string> result;vector<int> path;if (root == NULL) return result;findway(root, path, result);return result;}
};

Python:

map()函数:会根据提供的函数对指定序列做映射,语法:map(function, iterable)

     (1)function:函数

       (2) iterable:一个或多个序列

class Solution:def findway(self, node, path, result):# zhongpath.append(node.val)if node.left == None and node.right == None:sPath = '->'.join(map(str, path))result.append(sPath)returnif node.left:self.findway(node.left, path, result)path.pop()if node.right:self.findway(node.right, path, result)path.pop()def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:path = []result = []if root == None:return resultself.findway(root, path, result)return result

Leetcode404.左叶子之和

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

C++:

class Solution {
public:int sumOfLeftLeaves(TreeNode* root) {if(root == nullptr) return 0;if(root->left == nullptr && root->right == nullptr) return 0;//zuoint Leftsum = sumOfLeftLeaves(root->left);if(root->left != nullptr && root->left->left == nullptr && root->left->right == nullptr)Leftsum = root->left->val;//youint Rightsum = sumOfLeftLeaves(root->right);//zhongint sum = Leftsum + Rightsum;return sum;}
};

Leetcode 222.完全二叉树的节点个数

题目链接:222. 完全二叉树的节点个数

完全二叉树的结点数量可以通过满二叉树结点数量公式计算:2**depth - 1

C++:

class Solution {
public:int countNodes(TreeNode* root) {//后序遍历if(root == nullptr) return 0;auto left = root->left;int leftdepth = 0;auto right = root->right;int rightdepth = 0;while(left){left = left->left;leftdepth++;}while(right){right = right->right;rightdepth++;}if(leftdepth == rightdepth)return (2 << leftdepth) - 1;//zuoint leftnum = countNodes(root->left);//youint rightnum = countNodes(root->right);//zhongint num = leftnum + rightnum + 1;return num;}
};

这篇关于代码随想录算法训练营第十五天| 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和、 222.完全二叉树的节点个数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1116177

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

hdu2544(单源最短路径)

模板题: //题意:求1到n的最短路径,模板题#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#i

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

spoj705( 求不相同的子串个数)

题意:求串s的不同子串的个数 解题思路:任何子串都是某个后缀的前缀,对n个后缀排序,求某个后缀的前缀的个数,减去height[i](第i个后缀与第i-1 个后缀有相同的height[i]个前缀)。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstrin

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问