【树】102. 二叉树的层序遍历

题目:

解法:

方法一:

 1 void printLevel(BinaryTree *p, int level)
 2 {
 3     if (!p)
 4     {
 5         return;
 6     }
 7     if (level == 1)
 8     {
 9         cout << p->data << " ";
10     }
11     else
12     {
13         printLevel(p->left, level-1);
14         printLevel(p->right, level-1);
15     }
16 }
17 
18 void printLevelOrder(BinaryTree *root)
19 {
20     int height = maxHeight(root);
21     for (int level = 1; level <= height; level++)
22     {
23         printLevel(root, level);
24         cout << endl;
25     }
26 }

方法二:

 1 //小集合和大集合均OK
 2 class Solution {
 3 public:
 4     vector<vector<int> > levelOrder(TreeNode *root)
 5     {
 6         vector< vector<int> > result;
 7         if (root == NULL)
 8             return result;
 9 
10         queue<TreeNode*> q;
11         q.push(root);
12 
13         int count = 1;
14         int level = 0;
15 
16         vector<int> tmp(0);
17         while(!q.empty())
18         {
19             tmp.clear();
20             level = 0;
21 
22             for (int i = 0; i < count; ++i)
23             {
24                 root = q.front();
25                 q.pop();
26                 tmp.push_back(root->val);
27 
28                 if (root->left != NULL)
29                 {
30                     q.push(root->left);
31                     ++level;
32                 }
33                 if (root->right != NULL)
34                 {
35                     q.push(root->right);
36                     ++level;
37                 }
38             }
39 
40             count = level;
41             result.push_back(tmp);
42         }
43         //reverse(result.begin(), result.end());
44         return result;
45     }
46 };

猜你喜欢

转载自www.cnblogs.com/ocpc/p/12817545.html