zoukankan      html  css  js  c++  java
  • leetcode第一刷_Minimum Depth of Binary Tree

    非常easy的题目。只是还是认为要说一下。

    最小深度。非常快想到bfs,层序遍历嘛。本科的时候实在是没写过多少代码,一開始竟然想不到怎么保存一层的信息。后来想到能够压入一个特殊的对象,每次到达这个对象就知道是一层了。我用的是空指针。认为这个适用性还是不错的。一层的节点入队结束后,应该压入一个NULL。当一层的节点都处理完。遇到NULL的时候,要在队列尾部再入队一个NULL,这是后一层的分界线嘛。

    昨天在还有一道题上看到了还有一种做法。用一个数据结构vector<set<*> >(2)。当然vector里面包裹的是什么结构体并不重要,仅仅要能够高速的压入和顺序訪问就可以。vector的维度是二维的,保存当前层和上一层的对象。然后用两个相互排斥int值cur和pre来保存正在訪问和上一次訪问的vector,每一次遍历,扫描pre层。发现的节点增加到cur层,下次循环时,交换一下。

    我认为这是一种非常好的思路,尽管用在普通的层序遍历上有杀鸡用牛刀了。

    class Solution {
    public:
        int minDepth(TreeNode *root) {
            if(root == NULL)
                return 0;
            int res = 1;
            queue<TreeNode*> ceng;
            TreeNode *pNode;
            ceng.push(root);
            ceng.push(NULL);
            while(!ceng.empty()){
                if(ceng.front() == NULL){
                    res++;  
                    ceng.pop();
                    ceng.push(NULL);
                }
                pNode = ceng.front();
                ceng.pop();
                if(!pNode->left&&!pNode->right)
                    return res;
                if(pNode->left)
                    ceng.push(pNode->left);
                if(pNode->right)
                    ceng.push(pNode->right);
            }
            return res;
        }
    };


  • 相关阅读:
    P3973 [TJOI2015]线性代数
    P3168 [CQOI2015]任务查询系统
    二次剩余学习笔记
    URL注入攻击+知识星球资源整理
    我的网络安全架构知识点的总结(待完善)
    Sudo提权
    DNSlog平台各种利用姿势(盲注)
    Wireshark抓包理论加实操
    Fofa搜索技巧(理论加实践的整理)
    Windows留后门维持权限(其中包括详细的telnet改端口与连接)
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7092562.html
Copyright © 2011-2022 走看看