每天一道LeetCode-----计算二叉树的最大深度及最小深度,判断二叉树是否是高度平衡二叉树
Maximum Depth of Binary Tree
原题链接Maximum Depth of Binary Tree
计算给定二叉树的最大深度,最大深度指从根节点到叶子节点的最长路径上的节点个数
注意叶子节点的定义,只有左右两个子节点都是空节点时,该节点才被称作叶子节点
对于任意一个节点,它的深度是由它左右两个子节点的深度决定的,即如果左右两个子节点的深度分别为HLHLHL和HRHRHR,那么当前节点的深度就是max(HL,HR)+1max(HL, HR) + 1max(HL,HR)+1
所以,可以从根节点向下递归,在向上返回的过程中,由子节点求父节点的深度。当最后回到根节点时,整个二叉树的最大深度就是根节点的左右子节点的深度加1
代码如下
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {public:int maxDepth(TreeNode* root) {return root ? max(maxDepth(root->left), maxDepth(root->right)) + 1 : 0; }
};
Minimum Depth of Binary Tree
原题链接Minimum Depth of Binary Tree
计算给定二叉树的最小深度,最小深度指从根节点到叶子节点的最短路径上的节点个数
上面要求是最大深度,所有叶子节点的定义不是很重要,但是最小深度就需要注意叶子节点的定义了。因为如果只是简单的将上述代码的max改为min,那么即使某个节点不是叶子节点,但是它的一个子节点是空节点,那么递归就会返回,从而误判这条路径是最短的
解决方法是判断一个节点是否是叶子节点,代码如下
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {public:int minDepth(TreeNode* root) {if(!root) return 0;/* 是叶子节点,返回1 */if(!root->left && !root->right) return 1;/* 不是叶子节点 */if(root->left && !root->right) return minDepth(root->left) + 1;if(!root->left && root->right) return minDepth(root->right) + 1;return min(minDepth(root->left), minDepth(root->right)) + 1;}
};
Balanced Binary Tree
原题链接Balanced Binary Tree
判断一个二叉树是否是高度平衡二叉树,要求任意一个节点的左右子树的高度差不能超过1(实际上就是AVL树要满足的要求啦~)
依次递归求每个节点的左右子树的高度即可,代码如下
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {public:bool isBalanced(TreeNode* root) {bool balance = true;height(root, balance);return balance;}
private:int height(TreeNode* root, bool& balance){if(!balance || !root) return 0;int hl = height(root->left, balance);int hr = height(root->right, balance);if(abs(hl - hr) > 1) balance = false;return max(hl, hr) + 1;}
};
上面三道题都是关于二叉树的,思路比较简单,需要注意的是二叉树的递归方法,因为在求解二叉树有关问题时通常都需要进行递归
每天一道LeetCode-----计算二叉树的最大深度及最小深度,判断二叉树是否是高度平衡二叉树相关推荐
- 二叉树(六):二叉树的最大深度与最小深度
一.二叉树的深度与高度 1.二叉树的深度 对于二叉树中的某个节点,其深度是从根节点到该节点的最长简单路径所包含的节点个数,是从上面向下面数的.因此访问某个节点的深度要使用先序遍历 2.二叉树的高度 对 ...
- LeetCode 二叉树、N叉树的最大深度与最小深度(递归解)
目录 104. 二叉树的最大深度 559. N叉树的最大深度 111. 二叉树的最小深度 之前的笔记中,已经用层序遍历解决过这个问题了 现在试着用深度的解法去求解 104. 二叉树的最大深度 给定一个 ...
- php 实现二叉树的最大深度_Java如何实现求二叉树的最大深度(附代码)
本篇文章给大家带来的内容是关于Java如何实现求二叉树的最大深度(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远 ...
- 完全二叉树最小深度_二叉树:我有多少个节点?
给「代码随想录」一个星标吧! ❝ 不管有多少个节点,大家中秋&&国庆快乐哈 ❞ 如果之前两篇二叉树:看看这些树的最大深度, 二叉树:看看这些树的最小深度都认真看了的话,这道题目可以分分 ...
- LeetCode LCP 07. 传递信息 / NC111 最大数 / NC16 判断二叉树是否对称 / NC13 二叉树的最大深度
祝我党百年华诞生日快乐 LCP 07. 传递信息 2021.7.1 每日一题 题目描述 小朋友 A 在和 ta 的小伙伴们玩传信息游戏,游戏规则如下:有 n 名玩家,所有玩家编号分别为 0 - n-1 ...
- 二叉树的最大深度(力扣作业)
二叉树的最大深度 题目描述 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,nu ...
- 牛客题霸 [二叉树的最大深度]C++题解/答案
二叉树的最大深度 题目描述 求给定二叉树的最大深度, 最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量. 题解: 众所周知,树有左子树和右子树,每向下一层,深度就+1, 所以我们就不断递归, ...
- 【数据结构与算法】二叉树结点最小深度求解算法
问题描述 给定二叉树,找到其最小深度. 最小深度是沿着从根结点到最近的叶子结点的最短路径的节点数. 分析 递归实现即可: 当前结点为null,表示到达了叶子结点,终止递归,返回0. 当前结点非null ...
- Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历
Top1:Leetcode 129求根节点到叶节点数字之和 官方题解:https://leetcode.cn/problems/sum-root-to-leaf-numbers/solution/qi ...
最新文章
- PingCode Wiki ——国内最顶级的产研团队知识库产品介绍
- P1284 三角形牧场
- 联想小新air13pro重装系统_联想 小新Air 13 ProU盘装系统win7教程
- mac qt android开发环境搭建,Mac 下 PyQt5 的开发环境搭建
- GEEK学习笔记— —程序猿面试宝典笔记(二)
- 【存储知识学习】第三章磁盘原理与技术3.4硬盘接口技术和SCSI硬盘接口--《大话存储》阅读笔记
- Myeclipse10下载,安装,破解,插件,优化介绍.
- php 接口安全解决方案,php接口数据安全解决方案(一)
- python字符串最大长度_字符串String的最大长度
- 栈(操作受限的线性表)---C语言版
- pad 迅雷 bt php_iOS永久版迅雷来了 BT、磁力链下载最全教程收好
- uiswitch样式_iOS - UISwitch 、UISegmentedControl
- postgreSql版的occurs函数
- 关于局域网不能访问-共享打印机
- 学习过程中所遇到的问题及解决方法总结
- java replica set_kubernetes ReplicaSet的简单使用
- Skywalking使用与探针机制
- 不管风云如何变幻 企业有“云算盘”就够了
- Android虚拟键盘和虚拟触摸驱动
- 浅谈微信小程序的功能定位和使用场景
热门文章
- AMD、CMD、CommonJS、ES6(import/export)
- Java黑皮书课后题第5章:5.10(找出能被5和6整除的数)编写程序,显示从100到1000之间所有能被5和6整除的数,每行显示10个。数字之间用一个空格字符隔开
- salad--8||9
- python笔记九(迭代)
- string (KMP+期望DP)
- SQL查询语句执行速度快,存储过程执行慢
- [翻译] VLDContextSheet
- IE 域组策略对服务器无效的原因
- iOS之深入解析内存管理Tagged Pointer的底层原理
- 【数据结构与算法】之深入解析“打家劫舍III”的求解思路与算法示例