zoukankan      html  css  js  c++  java
  • 【LeetCode】111. Minimum Depth of Binary Tree (2 solutions)

    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.

    Maximum Depth of Binary Tree对照看

    解法一:深度优先遍历

    借助栈进行深度优先遍历(DFS),栈中存放的就是从根到当前节点的路径。

    当遇到叶节点的时候,把当前栈中路径长度与minD比较,取较小值赋给minD。

    返回minD即最小深度。

    /**
     * Definition for binary tree
     * 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;
            stack<TreeNode*> stk;
            int ret = INT_MAX;
            unordered_map<TreeNode*, bool> visited;
            stk.push(root);
            visited[root] = true;
            while(!stk.empty())
            {
                TreeNode* top = stk.top();
                if(!top->left && !top->right)
                //leaf
                    ret = min(ret, (int)stk.size());
                
                if(top->left && visited[top->left] == false)
                {
                    stk.push(top->left);
                    visited[top->left] = true;
                    continue;
                }
                if(top->right && visited[top->right] == false)
                {
                    stk.push(top->right);
                    visited[top->right] = true;
                    continue;
                }
                
                stk.pop();
            }
            return ret;
        }
    };

    解法二:递归

    注意:定义中需要到达叶节点,因此空的子节点不计算在内。

    /**
     * Definition for binary tree
     * 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;
            else if(root->left && !root->right)
                return 1+minDepth(root->left);
            else if(!root->left && root->right)
                return 1+minDepth(root->right);
            else
                return 1+min(minDepth(root->left), minDepth(root->right));
        }
    };

  • 相关阅读:
    3.struts2接收页面传参的三种方式
    2.struts2访问web资源(在struts2中获取session,request等等)
    1.struts2原理和入门程序
    3.springMVC+spring+Mybatis整合Demo(单表的增删该查,这里主要是贴代码,不多解释了)
    2.springMVC+spring+Mybatis整合
    1.springMVC+spring+Mybatis的整合思路
    clipboard
    SDN&NFV
    linux命令速查
    todo
  • 原文地址:https://www.cnblogs.com/ganganloveu/p/4131052.html
Copyright © 2011-2022 走看看