Java实现求二叉树深度
两种方法,DFS(递归)和BFS
二叉树结构
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;
}
}
求深度方法
1、DFS(递归)栈
时间复杂度:O(n)
空间复杂度:O(height)
private static int maxDepth(TreeNode root) {
if (root == null)
return 0;
int left = maxDepth(root.left);
int right = maxDepth(root.right);
if (left > right)
return left + 1;
else
return right + 1;
}
2、BFS(层次遍历)队列
时间复杂度:O(n)
空间复杂度:O(n)[最坏]
private static int maxDepth(TreeNode root) {
if (root == null)
return 0;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(root);
int res = 0;
while (!queue.isEmpty()) {
int size = queue.size();
while (size > 0) {
TreeNode p = queue.poll();
if (p.left != null) queue.offer(p.left);
if (p.right != null) queue.offer(p.right);
size --;
}
res++;
}
return res;
}