剑指offer(38)二叉树的深度
/**
 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;
         }
         int left = TreeDepth(root.left);
         int right = TreeDepth(root.right);
         return (left > right) ? left + 1 : right + 1;
     }
 }
 */
 //非递归,层序遍历
 import java.util.*;
 public class Solution{
     public int TreeDepth(TreeNode root){
         if(root == null){
             return 0;
         }
         Queue<TreeNode> queue = new LinkedList<TreeNode>();
         queue.offer(root);
         //count为现在已经遍历的节点个数,depth为深度,endStart为一层的结束,也就预示着下一层的开始
         //每当count计数已经到达了endStart了,说明这一层结束了(因为第一层是根节点,所以为初始化为1)
         //由于层序遍历队列的特性,栈中存的都是即将被遍历(弹出)的节点,所以每次一层结束了,count重新计数,depth+1,endStart重新被赋值为下一层的节点个数,即为栈现在的大小
         int count = 0, depth = 0, endStart = 1;
         while(queue.size() != 0){
             TreeNode head = queue.poll();
             count++;
             if(head.left != null){
                 queue.offer(head.left);
             }
             if(head.right != null){
                 queue.offer(head.right);
             }
             if(count == endStart){
                 depth++;
                 count = 0;
                 endStart = queue.size();
             }
         }
         return depth;
     }
 }
 查看25道真题和解析
查看25道真题和解析