leetcode第一刷_Minimum Depth of Binary Tree
阿新 • • 發佈:2017-06-29
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