二叉树的深度

 class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;
    }

    public int height(){
        return Math.max(left==null?0 : left.height(),right==null?0:right.height())+1;
    }
}

import  java.util.*;
public class Solution {
    
    //方法一:递归的方式(把方法写在结点类中)
    public int TreeDepth(TreeNode root) {
        //查看root结点是否为null
        if(root==null){
            return 0;
        }
        //计算树的深度
        return root.height();
    }
    
    //方法二:递归的方式(深度优先遍历的思想)
    public int TreeDepth(TreeNode root) {
        //查看root结点是否为null
        if(root==null){
            return 0;
        }
        //左递归
        int  leftNum=TreeDepth(root.left);
        //右递归
        int  rightNum=TreeDepth(root.right);
        //比较左子树和右子树的高度,选出一个大的加1
        return   Math.max(leftNum,rightNum)+1;
    }
    
    
    //方法三:层次遍历(广度优先遍历的思想)
    public int TreeDepth(TreeNode root) {
        //查看root结点是否为null
        if(root==null){
            return 0;
        }
        //新建一个队列(先进先出)
        Queue<TreeNode> que=new LinkedList<TreeNode>();
        //根节点入队
        que.add(root);
        //记录树的深度
        int high=0;
        //当队列不为空时,计算树的深度
        while(!que.isEmpty()){
            //计算出当前循环队列中元素的数目
            int  size=que.size();
            //将当层循环的元素弹出队列,并把它的左右子节点加入队列
            while(size!=0){
                //当层元素弹出队列
                TreeNode  node=que.poll();
                //左结点存在则入队
                if(node.left!=null){
                    que.add(node.left);
                }
                //右节点存在则入队
                if(node.right!=null){
                    que.add(node.right);
                }
                //记录当前循环还剩的元素个数
                size--;
            }
            //里层循环结束  则深度加1
            high++;
        }
        //返回树的深度
        return  high;
    }
   
}