本题可以有两种做法,最为常见的就是使用递归的方法。

解法1:递归常规做法,求出左右子树的高度,并进行比较,然后再加上根节点的高度1,并返回最终的结果!
public class Solution {
    public int TreeDepth(TreeNode root) {
        //特殊情况处理,如果为空,直接返回
        if(root==null) return 0;
        //求左子树的高度
        int left_height = TreeDepth(root.left);
        //求右子树的高度
        int right_height = TreeDepth(root.right);
        return (left_height>right_height)?(left_height+1):(right_height+1);
    }
}

解法2:借助队列,并使用层次遍历二叉树,分别将每一层的节点放入到队列中,然后在遍历这些节点,再将他们的子节点放入队列,直到遍历到最后一层!
public class Solution {
    public int TreeDepth(TreeNode root) {
        if(root==null) return 0;
        Queue<TreeNode> result = new LinkedList<>();
        result.add(root);
        int height = 0;
        while(!result.isEmpty()){
            //获取当前的根节点
            int size = result.size();
            while(size>0){//遍历当前层,将该层的子节点都加入队列中
                TreeNode nowroot = result.poll();
                if(nowroot.left!=null) result.add(nowroot.left);
                if(nowroot.right!=null) result.add(nowroot.right);
                size = size-1;//
            }
            height+=1;//高度加1
        }
        return height;
    }
}