[LeetCode] Binary Tree Level Order Traversal

A classic tree traversal problem. I share my two solutions here: BFS and DFS.

BFS:

 1     vector<vector<int>> levelOrder(TreeNode *root) {
 2         vector<vector<int>> levels;
 3         if(!root) return levels;
 4         queue<TreeNode*> toVisit;
 5         toVisit.push(root);
 6         int numLevelNodes = 1;
 7         while(!toVisit.empty()) {
 8             vector<int> level;
 9             for (int i = 0; i < numLevelNodes; i++) {
10                 TreeNode* node = toVisit.front();
11                 toVisit.pop();
12                 level.push_back(node -> val);
13                 if(node -> left) toVisit.push(node -> left);
14                 if(node -> right) toVisit.push(node -> right);
15             }
16             levels.push_back(level);
17             numLevelNodes = toVisit.size();
18         }
19         return levels;
20     }

DFS:

 1 vector<vector<int>> levelOrder(TreeNode *root) {
 2     vector<vector<int>> levels;
 3     if(!root) return levels;
 4     int curLevel = 1;
 5     bool nextLevel = true;
 6     while(nextLevel) {
 7         nextLevel = false;
 8         vector<int> level;
 9         levelTraverse(root, curLevel++, nextLevel, level);
10         levels.push_back(level);
11     }
12     return levels;
13 }
14 void levelTraverse(TreeNode* node, int curLevel, bool& nextLevel, vector<int>& level) {
15     if(!node) return;
16     if(curLevel == 1) {
17         level.push_back(node -> val);
18         if(node -> left || node -> right) nextLevel = true;
19     }
20     else {
21         levelTraverse(node -> left, curLevel - 1, nextLevel, level);
22         levelTraverse(node -> right, curLevel - 1, nextLevel, level);
23     }
24 }

 

posted @ 2015-06-02 23:29  jianchao-li  阅读(175)  评论(0编辑  收藏  举报