1.题目:
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
2.思路:
方法一:递归
写法构思:传入某节点,调用该方法,返回的应该是以传入节点为根节点的树的深度,而树的深度,肯定和左右子树深度有关,所以进入这个方法后,就包含了左右子树的深度(而要得到左右子树的深度,肯定又是以左右子节点为根节点,再次调用该方法深度获取的,因此此时进行递归),并且还有由一个左右深度比较的过程,然后取较大值,这个较大值就是该节点左右子树深度较深的值,以该值+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;
    }
}

方法二:层序遍历+队列
利用的队列,首先入队的是根节点,使其入队,遍历某个节点时,将该节点出队,并将该节点的所有子节点入队,当同一深度的节点都遍历完的时候,深度++,所以设depth是深度。

import java.util.Queue;
import java.util.LinkedList;
public class Solution {
    public int TreeDepth(TreeNode root) {
        if(root==null){
            return 0;
        }
        Queue<TreeNode>queue=new LinkedList<TreeNode>();//队列
        queue.add(root);
        int deepth=0;//记录深度
            while(queue.size()!=0){//到底
                deepth++;
                for(int i=0;i<queue.size();i++){//循环读取每一层
                     TreeNode node=queue.poll();//先出队列
                     if(node.left!=null){//若有左子节点,加入队列
                         queue.add(node.left);
                     }
                    if(node.right!=null){//若有右子节点加入队列
                        queue.add(node.right);
                    }
                }
            }
        return deepth;
    }
}