输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 1 。
数据范围:节点的数量满足
,节点上的值满足 
进阶:空间复杂度
,时间复杂度 )
假如输入的用例为{1,2,3,4,5,#,6,#,#,7},那么如下图:
// 递归层次遍历
import java.util.*;
public class Solution {
public int TreeDepth(TreeNode root) {
if (root == null) return 0;
Queue<TreeNode> queue1 = new LinkedList();
Queue<TreeNode> queue2 = new LinkedList();
queue1.add(root);
// 广度遍历
int depth = deepth(queue1, queue2, 0);
return depth;
}
private int deepth(Queue<TreeNode> queue1, Queue<TreeNode> queue2, int depth) {
if (!queue1.isEmpty() && queue2.isEmpty()) {
while (!queue1.isEmpty()) {
TreeNode node = queue1.poll();
if (node.left != null) {
queue2.add(node.left);
}
if (node.right != null) {
queue2.add(node.right);
}
}
return deepth(queue1, queue2, depth += 1);
} else if (queue1.isEmpty() && !queue2.isEmpty()) {
while (!queue2.isEmpty()) {
TreeNode node = queue2.poll();
if (node.left != null) {
queue1.add(node.left);
}
if (node.right != null) {
queue1.add(node.right);
}
}
return deepth(queue1, queue2, depth += 1);
} else {
return depth;
}
}
} public class Solution {
private int res = 0;
public int TreeDepth(TreeNode root) {
dfs(root, 1);
return res;
}
public void dfs(TreeNode root, int deep) {
if (root == null) {
return;
}
res = Math.max(res, deep);
dfs(root.left, deep + 1);
dfs(root.right, deep + 1);
}
} public class Solution {
public int TreeDepth(TreeNode root) {
if(root == null) return 0;
int left = TreeDepth(root.left);
int right = TreeDepth(root.right);
//left和right的意义是该结点左子树和右子树深度,结果取最大
return 1 + Math.max(left, right);
}
} public class Solution {
public int maxDepth = 0;
public int TreeDepth(TreeNode root) {
handle(root, 1);
return maxDepth;
}
public void handle(TreeNode root, int count) {
if(root == null) return ;
if(count > maxDepth) maxDepth = count;
handle(root.left, count + 1);
handle(root.right, count + 1);
}
} import java.util.*;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public int TreeDepth(TreeNode root) {
if(root == null){
return 0;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
int depth = 0;
while(!queue.isEmpty()){
int size = queue.size();
depth++;
while(size != 0){
TreeNode cur = queue.poll();
if(cur.left != null){
queue.offer(cur.left);
}
if(cur.right != null){
queue.offer(cur.right);
}
size--;
}
}
return depth;
//方法2
// public int max = 0;
// public void TreeNodeHelper(TreeNode root,int cur){
// if(root == null){
// //去重
// if(max < cur){
// max = cur;
// }
// return;
// }
// TreeNodeHelper(root.left,cur + 1);
// TreeNodeHelper(root.right,cur + 1);
// }
// public int TreeDepth(TreeNode root) {
// if(root == null){
// return 0;
// }
// int depth = 0;
// TreeNodeHelper(root,depth);
// return max;
//方法1
// int leftTree = TreeDepth(root.left);
// int rightTree = TreeDepth(root.right);
// return (leftTree > rightTree) ? leftTree + 1 : rightTree + 1;
}
} public class Solution {
public int TreeDepth(TreeNode root) {
if(root==null){
return 0;
}
int left = TreeDepth(root.left);
int right = TreeDepth(root.right);
return Math.max(left,right)+1;
}
} 非递归: import java.util.Deque;
import java.util.LinkedList;
public class Solution {
public int TreeDepth(TreeNode root) {
if(root==null){
return 0;
}
Deque<TreeNode> queue = new LinkedList();
queue.add(root);
int depth = 0;
while(!queue.isEmpty()){
depth++;
int queueSize = queue.size();
for(int i=0;i<queueSize;i++){
TreeNode node = queue.pollFirst();
if(node.left!=null){
queue.add(node.left);
}
if(node.right!=null){
queue.add(node.right);
}
}
}
return depth;
}
}