LeetCode 二叉树、N叉树的最大深度与最小深度(递归解)
目录
- 104. 二叉树的最大深度
- 559. N叉树的最大深度
- 111. 二叉树的最小深度
之前的笔记中,已经用层序遍历解决过这个问题了
现在试着用深度的解法去求解
104. 二叉树的最大深度
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回它的最大深度 3 。
**选择深度遍历方式:**由于我们需要返回深度信息,所以选择后序遍历,通过递归函数的返回值做计算树的高度。
1、确定递归函数的参数以及返回值类型
输入树的根结点,返回这棵树的深度
int getDepth(TreeNode* node)
2、确定终止条件:
如果为空结点,返回高度0
if(node == NULL) return 0;
3、确定单层逻辑:
先求左子树深度,再求右子树的深度,最后取左右深度最大的数值+1(算上当前的中间结点),就是当前结点为根节点的树的最大深度。
int left=getDepth(node->left);
int right=getDepth(node->right);
return max(left,right)+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 getDepth(TreeNode* node){if(node == NULL) return 0;int left=getDepth(node->left);int right=getDepth(node->right);return max(left,right)+1;}int maxDepth(TreeNode* root) {int result=getDepth(root);return result;}
};
上面的方法使用的是后序遍历求根结点的高度来求二叉树的最大深度。
当然也可以使用前序遍历,更能体现出回溯的思想:
/*** 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 result;void getDepth(TreeNode* node,int depth){//中result = depth > result ? depth:result; //取结果与depth中的较大值。if(node->left ==NULL && node->right ==NULL) return ;//左if(node->left){depth++; //深度+1getDepth(node->left,depth);depth--; //回溯,深度-1}//右if(node->right){depth++; //深度+1getDepth(node->right,depth);depth--; //回溯,深度-1}return ;}int maxDepth(TreeNode* root) {result = 0;if(root == NULL) return result;getDepth(root,1);return result;}
};
559. N叉树的最大深度
给定一个 N 叉树,找到其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
例如,给定一个 3叉树 :
/*
// Definition for a Node.
class Node {
public:int val;vector<Node*> children;Node() {}Node(int _val) {val = _val;}Node(int _val, vector<Node*> _children) {val = _val;children = _children;}
};
*/class Solution {public:int getDepth(Node* node){if(node == NULL) return 0;int maxnum=0;for(int i=0;i<node->children.size();i++){maxnum=max(maxnum,getDepth(node->children[i]));}return maxnum+1;}int maxDepth(Node* root) {int result=getDepth(root);return result;}
};
111. 二叉树的最小深度
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回它的最小深度 2.
**选择深度遍历方式:**由于我们需要返回深度信息,所以选择后序遍历,通过递归函数的返回值做计算树的高度。
1、确定递归函数的参数以及返回值类型
输入树的根结点,返回这棵树的深度
int getDepth(TreeNode* node)
2、确定终止条件:
如果该结点的左右孩子都为空,返回 0
if(node==NULL) return 0;
3、确定单层逻辑:
如果左子树存在,右子树不存在,结果为左子树最小深度+1
如果右子树存在,左子树不存在,结果为右子树最小深度+1
如果两个子树都存在,选择最小的结果+1
如果两个孩子都不存在的话,进入下一个递归地时候会返回0,两个结果都是1,所以这里不需要考虑那样的情况
int leftDepth=getDepth(node->left);
int rightDepth=getDepth(node->right);
if(node->left && !node->right) return leftDepth+1;
if(!node->left && node->right) return rightDepth+1;
int result=1+min(rightDepth,leftDepth);
return result;
完整代码
class Solution {public:int minDepth(TreeNode* root) {if(root==NULL) return 0;int leftDepth=minDepth(root->left);int rightDepth=minDepth(root->right);if(root->left && !root->right) return leftDepth+1;if(!root->left && root->right) return rightDepth+1;return 1+min(rightDepth,leftDepth);}
};
LeetCode 二叉树、N叉树的最大深度与最小深度(递归解)相关推荐
- 二叉树(六):二叉树的最大深度与最小深度
一.二叉树的深度与高度 1.二叉树的深度 对于二叉树中的某个节点,其深度是从根节点到该节点的最长简单路径所包含的节点个数,是从上面向下面数的.因此访问某个节点的深度要使用先序遍历 2.二叉树的高度 对 ...
- 每天一道LeetCode-----计算二叉树的最大深度及最小深度,判断二叉树是否是高度平衡二叉树
Maximum Depth of Binary Tree 原题链接Maximum Depth of Binary Tree 计算给定二叉树的最大深度,最大深度指从根节点到叶子节点的最长路径上的节点个数 ...
- 二叉树的最小深度——递归法、迭代法
1题目 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明:叶子节点是指没有子节点的节点. 示例 1: 输入:root = [3,9,20,null,nu ...
- java 二叉树的最小深度详解
想了解更多数据结构以及算法题,可以关注微信公众号"数据结构和算法",每天一题为你精彩解答.也可以扫描下面的二维码关注 题目描述 给定一个二叉树,找出其最小深度. 最小深度是从根节点 ...
- leetcode 559 N叉树的最大深度
https://leetcode-cn.com/problems/maximum-depth-of-n-ary-tree/ 题目 给定一个 N 叉树,找到其最大深度. 最大深度是指从根节点到最远叶子节 ...
- LeetCode 559. N叉树的最大深度
文章目录 1. 题目 2. 解题 2.1 递归 2.2 按层queue遍历 1. 题目 给定一个 N 叉树,找到其最大深度. 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数. 2. 解题 2 ...
- leetcode 559. N 叉树的最大深度(Java版,N叉树的深度优先搜索)
题目 https://leetcode-cn.com/problems/maximum-depth-of-n-ary-tree/ 题解 思路是 N 叉树的遍历(深度优先搜索) /* // Defini ...
- 【LeetCode | 二叉树前、中、后序遍历{递归法}实现】
1.前序遍历 #include <iostream> #include <vector> #include <queue> #include <algorit ...
- 49 - 算法 - Leetcode-111 -二叉树的最小深度 -递归循环
//树除了 递归 还有 循环 左右比较 class Solution {public:int minDepth(TreeNode* root) {queue<TreeNode*> temq ...
最新文章
- R语言ggplot2可视化密度图(density plot)、改变密度图下的填充色实战
- java float 四舍五入_JAVA如何把一个float四舍五入到小数点后指定位数.
- 第58件事 借势文案创作实例
- 马斯克投15亿,价值47000美元的比特币,其实是一群数学家搞出来的……
- apache mahout_使用Apache Mahout创建在线推荐系统
- [转]ODAC 应用技巧 (一)使用 ODAC 的 Net 方式
- Flink部署、使用、原理简介
- 经典案例之MouseJack
- 字节跳动:高级人才的五个基本素质
- caffe常用格式binaryproto和leveldb
- 树莓派4b 创乐博 7寸 1920*1200 分辨率触摸屏校准
- [运维|系统] 在飞腾FT2000上安装CentOS7
- linux配置SVN,添加用户,配置用户组的各个权限教程
- win10桌面快捷方式图标变白
- 如何寻找省级软件产业主管部门认可的软件检测机构出具报告
- IGARSS2019竞赛总结
- 零代码平台在大型企业的进化之路
- java邮箱匹配_Java邮箱正则表达式
- 厦门大学数据库实验室----- 数据库系统原理
- 材料科学基础学习指导-吕宇鹏-名词和术语解释-第10章:材料概论
热门文章
- 【ECharts系列|02可视化大屏】 舆情分析,人口分析及警情警力活动情况的实现【上篇】
- ztree java 增删改_Ztree实现增删改查
- java arraylist 重复_Java中ArrayList去除重复元素
- 参数详解 复制进程_如何优化PostgreSQL逻辑复制
- 被嫌弃的eval和with
- 今天发现新大陆:haml和Emmet
- Odyssey.js – 使用现成模板在线创建互动的故事
- CSS 属性 - 伪类和伪元素的区别
- 盒模型的属性丶display显示丶浮动
- 解决Nginx: [error] open() Nginx.pid