您的位置:首页 > 其它

[LeetCode] Binary Tree Level Order Traversal

2015-06-02 23:29 337 查看
A classic tree traversal problem. I share my two solutions here: BFS and DFS.

BFS:

vector<vector<int>> levelOrder(TreeNode *root) {
vector<vector<int>> levels;
if(!root) return levels;
queue<TreeNode*> toVisit;
toVisit.push(root);
int numLevelNodes = 1;
while(!toVisit.empty()) {
vector<int> level;
for (int i = 0; i < numLevelNodes; i++) {
TreeNode* node = toVisit.front();
toVisit.pop();
level.push_back(node -> val);
if(node -> left) toVisit.push(node -> left);
if(node -> right) toVisit.push(node -> right);
}
levels.push_back(level);
numLevelNodes = toVisit.size();
}
return levels;
}


DFS:

vector<vector<int>> levelOrder(TreeNode *root) {
vector<vector<int>> levels;
if(!root) return levels;
int curLevel = 1;
bool nextLevel = true;
while(nextLevel) {
nextLevel = false;
vector<int> level;
levelTraverse(root, curLevel++, nextLevel, level);
levels.push_back(level);
}
return levels;
}
void levelTraverse(TreeNode* node, int curLevel, bool& nextLevel, vector<int>& level) {
if(!node) return;
if(curLevel == 1) {
level.push_back(node -> val);
if(node -> left || node -> right) nextLevel = true;
}
else {
levelTraverse(node -> left, curLevel - 1, nextLevel, level);
levelTraverse(node -> right, curLevel - 1, nextLevel, level);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: