问题描述
问题分析
这是一个经典的分治类型的题目。使用分治法,直接将求整个树的高度的问题分解为求两个子树的高度问题,层层递归,即可求出整个树的高度。
树的高度 = max(左子树的高度,右子树的高度)+ 1;
解法:分治法
- 时间复杂度:O( n ),其中 n 是结点的数量。
Java代码
package com.company;
public class Main {
static public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public static void main(String[] args) {
TreeNode root = new TreeNode(3);
root.left = new TreeNode(9);
root.right = new TreeNode(20);
root.right.left = new TreeNode(15);
root.right.right = new TreeNode(7);
root.right.right.right = new TreeNode(7);
System.out.println(maxDepth(root));
}
static public int maxDepth(TreeNode root) {
if (root == null){
return 0;
}
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
}
}
结果分析
以上代码的执行结果:
执行时间 | 内存消耗 |
---|---|
0 ms | 37.6 MB |