思路
递归/深度优先搜索, 维持一个全局变量记录深度
复杂度
时间复杂度O(n)
代码
//递归
class Solution {
int maxDepth = 0;
public int maxDepth(TreeNode root) {
if (root == null) {
return 0;
}
helper(root, 1);
return maxDepth;
}
private void helper(TreeNode node, int cur) {
if (node == null) {
return;
}
maxDepth = Math.max(cur, maxDepth);
helper(node.left, cur + 1);
helper(node.right, cur +1);
}
}
思路
分治法
复杂度
时间复杂度O(n)
代码
//分治
class Solution {
public int maxDepth(TreeNode root) {
int max = 0;
if (root == null) {
return max;
}
int left = maxDepth(root.left);
int right = maxDepth(root.right);
max = Math.max(left, right) + 1;
return max;
}
}
思路
广度优先搜索的方法, 用queue来记录树的节点
复杂度
时间复杂度O(n) 空间复杂度O(log n)
代码
//BFS
class Solution {
int maxDepth = 0;
public int maxDepth(TreeNode root) {
if (root == null) {
return 0;
}
int depth = 0;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(root);
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i <size; i++) {
TreeNode cur = queue.poll();
if (cur.left != null) {
queue.offer(cur.left);
}
if (cur.right != null) {
queue.offer(cur.right);
}
}
depth++;
}
return depth;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。