• 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; }
  • 相关阅读:
    JavaScript获取http,http://请求协议头,域名,端口,url
    JAVA Pattern正则获取大括号中内容,substring字符串截取获取大括号中内容
    系统时间相关
    简单搭建nfs
    电信电话相关
    windows常用设置
    sort用法
    vim查询替换相关
    vim常用命令 技巧
    编绎vim8.2+deepin v15.11
  • 原文地址:https://www.cnblogs.com/cquer-xjtuer-lys/p/11352218.html
Copyright © 2020-2023  润新知