• leetcode刷题10


    今天刷的题是LeetCode第104题,说的是给定一个二叉树,找出树的最大深度。

    所谓二叉树的深度是指根节点到最远叶子节点的最长路径的节点数

    首先想到的是递归法。递归法其实就是图中的深度优先算法。该算法与走迷宫类似,当遇到一个岔口的时候,就选择其中一条路走到头,当找不到出口的时候,再回到上一个岔口走另一条道路。

    该算法使用递归解决,其边界条件是当节点为null的时候,就返回0.具体地代码如下:

    public static int max(TreeNode root){
            //深度优先算法
            if (root==null)return 0;
            else {
                int leftHeight=max(root.left);
                int rightHeight=max(root.right);
                return Math.max(leftHeight,rightHeight)+1;
            }
        }

    其中使用到的TreeNode定义如下:

    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode (int x){
            val=x;
        }
    }

    针对该问题的另一种解法是层次遍历法,也就是图搜索中的广度优先算法。该算法是指先将节点的一度节点加入到队列中,在遍历的时候,吧二度节点也加入到队列中。但是遍历的时候都是先把一度节点遍历完,再遍历二度节点。并以此类推。

    广度优先算法的具体代码如下所示:

    public static int bfsMax(TreeNode root){
            //采用广度优先算法
            //首先定义一个队列,将需要访问的一度好友放入到队列中
            if (root==null)return 0;
            Queue<TreeNode> queue=new LinkedList<>();
            queue.add(root);
            int height=0;
            int levelSize=1;
            while (!queue.isEmpty()){
                TreeNode node=queue.poll();
                levelSize--;
                if (node.left!=null)queue.add(node.left);
                if (node.right!=null)queue.add(node.right);
                //特别注意这里的条件判断。levelsize存储的是每一层的个数,需要吧每一层的个数都遍历完,才深度加1       
            if (levelSize==0){ height++; levelSize=queue.size(); } } return height; }
  • 相关阅读:
    [比赛|考试]9.21上午考试
    给花_Q
    [比赛|考试] 9.17下午考试
    [比赛|考试]nowcoder NOIP提高组组第二场
    图论
    生成函数
    P4197 Peaks
    3942: [Usaco2015 Feb]Censoring
    P2245 星际导航
    P3565 [POI2014]HOT-Hotels
  • 原文地址:https://www.cnblogs.com/cquer-xjtuer-lys/p/11352218.html
Copyright © 2020-2023  润新知