您的位置:首页 > 其它

[LeetCode] Binary Tree Level Order Traversal II

2015-06-02 23:31 459 查看
Well, I do not see what this problem is for. The same code of Binary Tree Level Order Traversal can be used here. The only difference is that we should reverse the result before we return.

Again, both BFS and DFS solutions.

BFS:

vector<vector<int> > levelOrderBottom(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);
}
if (!level.empty()) levels.push_back(level);
numLevelNodes = toVisit.size();
}
reverse(levels.begin(), levels.end());
return levels;
}


DFS:

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