二叉树最大深度(广度优先bfs、深度优先dfs 两种思路实现)

描述:求给定二叉树的最大深度

深度是指树的根节点到任一叶子节点路径上节点的数量。

最大深度是所有叶子节点的深度的最大值。

在这里插入图片描述

一、广度优先思路实现(bfs)

通过队列实现

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /**
     * 一层一层遍历二叉树 并存入到队列中,然后每遍历一层让count++;
     * @param root TreeNode类 
     * @return int整型
     */
    public int maxDepth (TreeNode root) {
        // write code here
        if(root==null){
            return 0;
        }
        ArrayDeque<TreeNode> deque=new ArrayDeque<TreeNode>();
        int count=0;
        deque.add(root);
        while(!deque.isEmpty()){
            count++;		
            int n=deque.size();
            for(int i=0;i<n;i++){ //遍历当前层,把下一层加入到队列中
                TreeNode treeNode=deque.poll();
                if(treeNode.left!=null){
                    deque.add(treeNode.left);
                }
                if(treeNode.right!=null){
                    deque.add(treeNode.right);
                }
                
            }
        }
        return count;
        
        
    }
}

二、深度优先思路实现(dfs)

通过两个栈实现,同时出栈,同时入栈。

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /**
     * 搭配两个栈实现,一个栈存节点、一个栈存当前节点的所在层数
     * 
     * @param root TreeNode类 
     * @return int整型
     */
    public int maxDepth (TreeNode root) {
        // write code here
        if(root==null)
            return 0;
        Stack<TreeNode> stackNode=new Stack<TreeNode>();
        Stack<Integer> stackCount=new Stack<Integer>();
        stackNode.push(root);
        stackCount.push(1);
        int max=0;
        while(!stackNode.isEmpty()){
            
            int temp=stackCount.pop();
            TreeNode tree=stackNode.pop(); //一直取最后存入的,即先完成一个分支的深度遍历 
            if(temp>max){
                max=temp; //保证max存入的一直是最大的层数深度
            }
            
            if(tree.left!=null){
                stackNode.push(tree.left);
                stackCount.push(temp+1);
            }
            if(tree.right!=null){
                stackNode.push(tree.right);
                stackCount.push(temp+1);
            }
            
        }
        return max;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值