zoukankan      html  css  js  c++  java
  • 【LeetCode】:二叉树的Max,Min深度

     

    一、最大深度问题

     

    描述:

     

    Given a binary tree, find its maximum depth.

    The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

    For example:
    Given binary tree [3,9,20,null,null,15,7],

        3
       / 
      9  20
        /  
       15   7

    return its depth = 3.

     解答:

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        int maxDepth(TreeNode* root) {
            if(!root) 
                return 0;
            return max(maxDepth(root->left),maxDepth(root->right)) + 1;
        }
    };

     

     

    二、最小深度问题

     

    最小深度是沿着从根节点到最近叶节点的最短路径的节点数量

     

    描述:

     

    Given a binary tree, find its minimum depth.

     

    The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.

     

    解答:

     

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        int minDepth(TreeNode* root) {
            if(!root) 
                return 0;
            if(!root->left) 
                return 1 + minDepth(root->right);
            if(!root->right) 
                return 1 + minDepth(root->left);
            return min(minDepth(root->left),minDepth(root->right)) + 1;
        }
    };

     

     

    二、java:

    描述:

    -------------------------------------------------

    给定一个二叉树,找出其最小深度。

    二叉树的最小深度为根节点到最近叶子节点的距离。
    样例

    给出一棵如下的二叉树:

            1

         /      

       2       3

              /    

            4      5  

    这个二叉树的最小深度为 2

    -----------------------------------------------------------

    给定一个二叉树,找出其最大深度。

    二叉树的深度为根节点到最远叶子节点的距离。

    样例

    给出一棵如下的二叉树:

      1
     /  
    2   3
       / 
      4   5
    

    这个二叉树的最大深度为3.

    ------------------------------------------------------------

    解题思路:

    此类型的题目使用遍历子树的方法,递归找到左子树和右子树,多一层计数加1,最后左子树与右子树的层数比较,选出最小或者最大深度。其中最小深度因为有0干扰,需要多个条件判断。

    代码如下:

    public class 二叉树的最大深度 {
        /**
         * Definition of TreeNode:
         */
        public class TreeNode {
            public int val;
            public TreeNode left, right;
    
            public TreeNode(int val) {
                this.val = val;
                this.left = this.right = null;
            }
        }
        
        /**
         * @param root: The root of binary tree.
         * @return: An integer.
         */
        public int maxDepth(TreeNode root) {
            // write your code here
            int res=0;
            res=depth(res,root);
            return res;
        }
        
        public int depth(int res,TreeNode root){
            if(root==null)
                return res;
            if(root.left==null && root.right==null)
                return res+1;
            int res1=depth(res,root.left)+1;
            int res2=depth(res,root.right)+1;
            res = Math.max(res1,res2);
            return res;
        }
    }
    
    //*************************************
    
    public class 二叉树的最小深度 {
        
         /**
         * @param root: The root of binary tree.
         * @return: An integer.
         */
        public int minDepth(TreeNode root) {
            // write your code here
            int res=0;
            res=depth(res,root);
            return res;
        }
        
        public int depth(int res,TreeNode root){
            if(root==null)
                return res;
            if(root.left==null && root.right==null)//只有当左右子树都为空时才是叶子节点,这里不能用“||”
                return res+1;
            if(root.left!=null && root.right==null) //分别判断左右子树各自为空情况
                return res=depth(res,root.left)+1;
            if(root.left==null && root.right!=null)
                return res=depth(res,root.right)+1;
            int res1=depth(res,root.left)+1;
            int res2=depth(res,root.right)+1;
            res = Math.min(res1,res2);
            return res;
        }
    }
  • 相关阅读:
    计算与软件工程作业一
    《CLSZS团队》:团队项目选题报告
    计算与软件工程第五次作业
    计算与软件工程第四次作业
    计算与软件工程代码规范
    计算与软件工程第三次作业
    计算与软件工程第二次作业
    壹贰叁肆团队项目选题报告
    计算与软件工程 作业五
    计算与软件工程 作业四
  • 原文地址:https://www.cnblogs.com/ygh1229/p/7403349.html
Copyright © 2011-2022 走看看