初级算法——二叉树最大深度(BFS和DFS解法)

题目

给定一棵二叉树,求该树的最大深度

解法一:DFS(递归算法)

求二叉树的深度如果使用深度优先遍历就是计算每条路径的深度,然后比较哪一条最长,返回哪一条。如果换做使用递归,就是从下往上比较,看对于每一个结点来说左右哪条路最短,选择哪一条返回。由于递归方法比较简单,在此我们就不做赘述了,直接上代码!!!

public int maxDepth(TreeNode root){
    if(root == null){return 0;}        
    else{
        return 1+max(maxDepth(root.left),maxDepth(root.right));
    }
}
public static int max(int x,int y){
    return x>y?x:y;
}

解法二:BFS

        如果使用广度优先遍历,那么使用队列就是最好的选择(因为队列满足先进先出,父子结点按顺序来)。我们可以让每一层的结点依次进队列,设置一个变量统计进队列的结点数量。待该层结点全部进队列后再逐个出队列,共出该层进队列数量个结点,每个出队列都要判断该结点是否有子节点,如果有就让子节点再进队列。如此直到队列为空

public int maxDepth(TreeNode root){
        Queue<TreeNode> q = new LinkedList<TreeNode>();
        if(root != null){q.offer(root);}
        int deep = 0;
        //直到队列为空
        while(!q.isEmpty()){
            deep++;
            int size = q.size();
            //该层的结点个数为size,一层循环用于层的更替
            while(size != 0){         
                if(q.peek().left != null){
                    q.offer(q.peek().left);
                }
                if(q.peek().right != null){
                    q.offer(q.peek().right);
                }
                q.poll();
                size--;
            }  
        }
        return deep;
    }

如果你对Queue的库方法不太熟悉,可以参考这篇文章http://t.csdn.cn/qtgXl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值