1. 程式人生 > >leetcode第一刷_Minimum Depth of Binary Tree

leetcode第一刷_Minimum Depth of Binary Tree

popu 空指針 ret 普通 bin set ron right 我認

非常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;
    }
};


leetcode第一刷_Minimum Depth of Binary Tree