トピック:
二分木が与えられたら、その最大の深さを見つけます。
二分木の深さは、ルートノードから最も遠いリーフノードまでの最長パス上のノードの数です。
説明:リーフノードは、子ノードのないノードを指します。
例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
最大深度3を返します。
解決策1:再帰
/**
* 思路
* 遍历树
* 不断的递归,记录左右节点的深度,返回其中最大的
*/
public int maxDepth(TreeNode root) {
int maxDepth = recursive(root, 1);
return maxDepth;
}
private int recursive(TreeNode root, int maxDepth) {
if (root == null) return maxDepth-1;
int l_max = recursive(root.left, maxDepth + 1);
int r_max = recursive(root.right, maxDepth + 1);
return Math.max(l_max, r_max);
}
時間計算量:オン
スペースの複雑さ:O1
/**
* 思路:
* 获取左右节点中深度最大的那个
* 到了叶子节点0,0返回1
* 递归这个过程
*/
public int maxDepth(TreeNode root) {
if (root==null)return 0;
int leftDepth = maxDepth(root.left);
int rightDepth = maxDepth(root.right);
return Math.max(leftDepth,rightDepth)+1;
}
時間計算量:オン
スペースの複雑さ:O1
/**
* 思路
* 全局max,记录当前depth
* 比较depth max
*/
int max;
public int maxDepth(TreeNode root) {
recursive(root,1);
return max;
}
private void recursive(TreeNode root, int depth) {
if (root==null)return;
max=depth>max?depth:max;
recursive(root.left,depth+1);
recursive(root.right,depth+1);
}
時間計算量:オン
スペースの複雑さ:O1