首页 > 代码库 > leetcode第一刷_Minimum Depth of Binary Tree
leetcode第一刷_Minimum Depth of Binary Tree
很简单的题目,不过还是觉得要说一下。最小深度,很快想到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; } };
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。