• Minimum Depth of Binary Tree


    题目: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.

    思路:深搜+广搜

    深搜的方法和之前一样。主要讲一下广搜的方法。

    题目最关键的是,使用堆栈的方法,只要我碰到空节点,就返回最终数值,首先一开始就存入根节点,如果空,直接返回,接下来就是弹出节点,如果他没有左右节点,直接返回当前高度,程序很巧妙,每次都是高度加1,这个加1都是由当前层向下一层递进的时候加1的。如果左右节点存在,则存入堆栈。不存在不进行任何操作。

    重要的是:最小高度是指从根节点到最近的叶子节点的最小高度,是指没有的叶子节点。也就是说,只要没有孩子了,就返回。


    代码:

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
     //https://leetcode.com/problems/minimum-depth-of-binary-tree/
    class Solution1 {
    public:
        int minDepth(TreeNode* root) {
            if(root==NULL){
                return 0;
            }
            if(root->left==NULL&&root->right==NULL){
                return 1;
            }
    
            int left=INT_MAX;
            if(root->left){
                left=minDepth(root->left)+1;
            }
    
            int right=INT_MAX;
            if(root->right){
                right=minDepth(root->right)+1;
            }
            return min(left,right);
            //如果直接写 return min(minDepth(root->left)+1,minDepth(root->right)+1)这句的话
            //实际上忽略了根节点,一定是从根节点到叶子的最短距离
    
        }
    };
    
    class Solution2 {
    public:
        int minDepth(TreeNode* root) {
            return BFS(root);
        }
    
        int BFS(TreeNode * root){
            if(root==NULL){
                return 0;
            }
            queue<pair<TreeNode*,int> >q;
            q.push(make_pair(root,1));
            while(!q.empty()){
                TreeNode *curNode=q.front().first;
                int curStep=q.front().second;
                q.pop();//这一层结束
                if(curNode->left==NULL&&curNode->right==NULL){
                    return curStep;
                    //本题的意思就是只要有一层第一个出现空节点就是最小值
                }
                if(curNode->left!=NULL){
                    q.push(make_pair(curNode->left,curStep+1));
                }
                if(curNode->right!=NULL){
                    q.push(make_pair(curNode->right,curStep+1));
                }
                //本题的巧妙在于我每次都存入一层的节点,当然是没有空的情况下
                //当然题目一开始就判断了,如果下一个节点的左右孩子是空的话,直接返回
            }
        }
    
    };


  • 相关阅读:
    ReSharper License Server
    QGEditors.WinForms WinForms下使用的部分扩展控件
    .net 项目生成时自动更新版本号
    IntelliJ运行下载的Servlet时报错 Error running Tomcat 8.5.8: Unable to open debugger port (127.0.0.1:49551): java.net.SocketException
    在Mac系统中安装及配置Apache Tomcat
    继承
    对象和封装
    事务、视图、索引、备份、还原
    高级查询
    影院售票系统
  • 原文地址:https://www.cnblogs.com/jsrgfjz/p/8519883.html
Copyright © 2020-2023  润新知