题目描述
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
方法
后序遍历 — 递归
这道题的关键点在于
这个树的深度和左子树,右子树深度之间的关系
算法步骤
- 如果根节点不存在,说明树不存在,深度为0,返回0.
- 然后递归算左子树的深度,在递归算右子树的深度
- 最后返回左子树深度和右子树深度的最大值在+1(根节点)
class Solution {
public int maxDepth(TreeNode root) {
if(root == null) return 0;
int left = maxDepth(root.left);
int right = maxDepth(root.right);
return Math.max(left+1,right+1);
}
}
class Solution {
public int maxDepth(TreeNode root) {
if(root == null) return 0;//如果节点为0,树的深度为0
int left = maxDepth(root.left);//递归左子树的节点
int right = maxDepth(root.right);//递归右子树的节点
return Math.max(left+1,right+1);//找到左右子树的最大值然后加上根节点就是树的深度
}
}
相关题
N叉树的最大深度
题目描述
给定一个 N 叉树,找到其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。
思路:
这道题和上面的二叉树的深度很像,因为2叉树也可以看作一个N=2的N叉树。
每次递归找到子树的最大深度,然后返回最大子树深度+根节点1。
算法步骤
1.判断树是否为空,子树是否为空
2.定义一个变量用来存储深度的最大值max
3.如果子树不为空,遍历子树的节点
4.比较子树的节点和深度最大值谁大,如果子树的节点大,就赋值给深度最大值max
5.然后返回深度最大值加上根节点的1(max+1)
class Solution {
public int maxDepth(Node root) {
if(root == null) return 0;
if(root.children == null || root.children.size() == 0) return 1;//没有子树
int max = 0;//深度的最大值
for(int i = 0; i < root.children.size() ;i++){
int depth = maxDepth(root.children.get(i));//子树的深度最大值
if(depth > max){
max = depth;//子树深度赋值给深度最大值
}
}
return max + 1;//深度最大值+根节点 1
}
}
参考
https://blog.csdn.net/qq_43590771/article/details/109771346
如果那里理解不对,欢迎指正,谢谢~