• Leetcode 111 二叉树的最小深度


    Leetcode 111 二叉树的最小深度

    数据结构定义:

    给定一个二叉树,找出其最小深度。
    
    最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
    
    说明:叶子节点是指没有子节点的节点。
        
    输入:root = [3,9,20,null,null,15,7]
    输出:2
        
    输入:root = [2,null,3,null,4,null,5,null,6]
    输出:5
    

    普通深度递归写法:

    class Solution {
        private int depth = Integer.MAX_VALUE;
        public int minDepth(TreeNode root) {
            if (root == null) {
                return 0;
            }
            dfsDepth(root, 1);
            return depth;
        }
    
        private void dfsDepth(TreeNode root, int length) {
            if (root == null) {
                return;
            }
            if (root.left == null && root.right == null) {
                depth = Math.min(depth, length);
                return;
            }
            dfsDepth(root.left,  length + 1);
            dfsDepth(root.right,  length + 1);
        }
    }
    

    另一种深度遍历方式:

    class Solution {
        public int minDepth(TreeNode root) {
            if (root == null) return 0;
            else if(root.left == null) return minDepth(root.right) + 1;
            else if(root.right == null) return minDepth(root.left) + 1;
            else return Math.min(minDepth(root.left),minDepth(root.right)) + 1;
        }
    }
    

    广度优先遍历

    /*
    * 思路: 定义QueueNode类,保存TreeNode和对应的depth
    */
    class Solution {
        class QueueNode{
            private TreeNode root;
            private int depth;
            QueueNode(TreeNode root,int depth){
                this.root = root;
                this.depth = depth;
            }
            public TreeNode getTreeNode(){
                return root;
            }
            public int getDepth(){
                return depth;
            }
        }
        public int minDepth(TreeNode root) {
                if(root == null){
                    return 0;
                }
                Queue<QueueNode> queue = new LinkedList<>();
                queue.offer(new QueueNode(root,1));
                while(!queue.isEmpty()){
                    QueueNode node = queue.poll();
                    int depth = node.getDepth();
                    TreeNode treeNode = node.getTreeNode();
                    if(treeNode.left == null && treeNode.right == null){
                        return depth;
                    }
                    if(treeNode.left != null){
                        queue.offer(new QueueNode(treeNode.left,depth + 1));
                    }
                    if(treeNode.right != null){
                        queue.offer(new QueueNode(treeNode.right,depth + 1));
                    }
                }
                return 0;
        }
    }
    
  • 相关阅读:
    软件工程第一次作业
    20145101《JAVA程序设计》课程总结
    20145101《Java程序设计》第10周学习总结
    20145101《Java程序设计》第9周学习总结
    20145101《Java程序设计》第8周学习总结
    20145101 《Java程序设计》第7周学习总结
    20145101 第二次实验报告
    20145101实验一 实验报告
    20145101《Java程序设计》第6周学习总结
    20145101《Java程序设计》第5周学习总结
  • 原文地址:https://www.cnblogs.com/CodingXu-jie/p/14072323.html
Copyright © 2020-2023  润新知