注意区分高度和深度的区别:
高度:指的是从根节点到某个节点的边的数量
深度:指的是从某个节点到它的最远叶子节点的边的数量
求某个结点的高度就是它到叶子的距离;就某个结点的深度就是它到根节点的距离。
求高度用后序遍历
求深度用先序遍历
这里树的最大深度就等于根节点的高度,所以用后续遍历可求出。
1,力扣104,二叉树的最大深度
给定一个二叉树 root
,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:3
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int maxDepth(TreeNode root) {
if(root == null) return 0;
return 1+Math.max(maxDepth(root.left),maxDepth(root.right));
}
}
2,力扣559,N叉树的最大深度
给定一个 N 叉树,找到其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。
示例 1:
输入:root = [1,null,3,2,4,null,5,6] 输出:3
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public int maxDepth(Node root) {
if(root==null) return 0;
int depth = 0;
for(int i = 0;i<root.children.size();i++){
depth = Math.max(depth,maxDepth(root.children.get(i)));
}
return depth+1;
}
}