题目:
解法:
方法一:
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 };