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. 二叉树(六):二叉树的最大深度与最小深度

    一.二叉树的深度与高度 1.二叉树的深度 对于二叉树中的某个节点,其深度是从根节点到该节点的最长简单路径所包含的节点个数,是从上面向下面数的.因此访问某个节点的深度要使用先序遍历 2.二叉树的高度 对 ...

  2. LeetCode 二叉树、N叉树的最大深度与最小深度(递归解)

    目录 104. 二叉树的最大深度 559. N叉树的最大深度 111. 二叉树的最小深度 之前的笔记中,已经用层序遍历解决过这个问题了 现在试着用深度的解法去求解 104. 二叉树的最大深度 给定一个 ...

  3. php 实现二叉树的最大深度_Java如何实现求二叉树的最大深度(附代码)

    本篇文章给大家带来的内容是关于Java如何实现求二叉树的最大深度(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远 ...

  4. 完全二叉树最小深度_二叉树:我有多少个节点?

    给「代码随想录」一个星标吧! ❝ 不管有多少个节点,大家中秋&&国庆快乐哈 ❞ 如果之前两篇二叉树:看看这些树的最大深度, 二叉树:看看这些树的最小深度都认真看了的话,这道题目可以分分 ...

  5. LeetCode LCP 07. 传递信息 / NC111 最大数 / NC16 判断二叉树是否对称 / NC13 二叉树的最大深度

    祝我党百年华诞生日快乐 LCP 07. 传递信息 2021.7.1 每日一题 题目描述 小朋友 A 在和 ta 的小伙伴们玩传信息游戏,游戏规则如下:有 n 名玩家,所有玩家编号分别为 0 - n-1 ...

  6. 二叉树的最大深度(力扣作业)

    二叉树的最大深度 题目描述 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,nu ...

  7. 牛客题霸 [二叉树的最大深度]C++题解/答案

    二叉树的最大深度 题目描述 求给定二叉树的最大深度, 最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量. 题解: 众所周知,树有左子树和右子树,每向下一层,深度就+1, 所以我们就不断递归, ...

  8. 【数据结构与算法】二叉树结点最小深度求解算法

    问题描述 给定二叉树,找到其最小深度. 最小深度是沿着从根结点到最近的叶子结点的最短路径的节点数. 分析 递归实现即可: 当前结点为null,表示到达了叶子结点,终止递归,返回0. 当前结点非null ...

  9. Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历

    Top1:Leetcode 129求根节点到叶节点数字之和 官方题解:https://leetcode.cn/problems/sum-root-to-leaf-numbers/solution/qi ...

最新文章

  1. PingCode Wiki ——国内最顶级的产研团队知识库产品介绍
  2. P1284 三角形牧场
  3. 联想小新air13pro重装系统_联想 小新Air 13 ProU盘装系统win7教程
  4. mac qt android开发环境搭建,Mac 下 PyQt5 的开发环境搭建
  5. GEEK学习笔记— —程序猿面试宝典笔记(二)
  6. 【存储知识学习】第三章磁盘原理与技术3.4硬盘接口技术和SCSI硬盘接口--《大话存储》阅读笔记
  7. Myeclipse10下载,安装,破解,插件,优化介绍.
  8. php 接口安全解决方案,php接口数据安全解决方案(一)
  9. python字符串最大长度_字符串String的最大长度
  10. 栈(操作受限的线性表)---C语言版
  11. pad 迅雷 bt php_iOS永久版迅雷来了 BT、磁力链下载最全教程收好
  12. uiswitch样式_iOS - UISwitch 、UISegmentedControl
  13. postgreSql版的occurs函数
  14. 关于局域网不能访问-共享打印机
  15. 学习过程中所遇到的问题及解决方法总结
  16. java replica set_kubernetes ReplicaSet的简单使用
  17. Skywalking使用与探针机制
  18. 不管风云如何变幻 企业有“云算盘”就够了
  19. Android虚拟键盘和虚拟触摸驱动
  20. 浅谈微信小程序的功能定位和使用场景

热门文章

  1. AMD、CMD、CommonJS、ES6(import/export)
  2. Java黑皮书课后题第5章:5.10(找出能被5和6整除的数)编写程序,显示从100到1000之间所有能被5和6整除的数,每行显示10个。数字之间用一个空格字符隔开
  3. salad--8||9
  4. python笔记九(迭代)
  5. string (KMP+期望DP)
  6. SQL查询语句执行速度快,存储过程执行慢
  7. [翻译] VLDContextSheet
  8. IE 域组策略对服务器无效的原因
  9. iOS之深入解析内存管理Tagged Pointer的底层原理
  10. 【数据结构与算法】之深入解析“打家劫舍III”的求解思路与算法示例