题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
解法一:递归
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;
}
解法二:借助队列,对二叉树进行层次遍历;
在层次遍历的过程中,每次当队列中某一层的节点出队完成后,高度+1;
关键点:判别队列中某一层节点出队完成的标准是什么?
在出队之前,此时队列中记录的只有某一层节点,所以队列的大小就是某一层节点的个数。当此个数减到0的时候,则说明该层节点全部出队完成
import java.util.*;
public class Solution {
public int TreeDepth(TreeNode root) {
if(root == null)
return 0;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int count = 0;
while(!queue.isEmpty()){
int size = queue.size();
while(size>0){
TreeNode temp = queue.poll();
if(temp.left != null)
queue.add(temp.left);
if(temp.right != null)
queue.add(temp.right);
size --;
}
count++;
}
return count;
}
}