题目:102. 二叉树的层序遍历
代码
迭代法
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {queue<TreeNode*> que;TreeNode* cur;int i, size;vector<vector<int>> result;if(root != NULL){que.push(root);}else{return result;}while(!que.empty()){vector<int> temp;size = que.size();for(i = 0; i < size; i++){cur = que.front();temp.push_back(cur->val);if(cur->left){que.push(cur->left);}if(cur->right){que.push(cur->right);}que.pop();}result.push_back(temp);}return result;}
};
递归法
我引入了order
,来记录递归调用的顺序,方便理解:
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:void Order(TreeNode* cur, int depth, vector<vector<int>>& result, int& order){order++;cout << "order = " << order << ", ";if(cur == NULL){cout << endl;return;}if(depth == result.size()){// 来到新的层result.push_back(vector<int> ());}cout << "depth = " << depth << ", val = " << cur->val << endl;result[depth].push_back(cur->val);Order(cur->left, depth + 1, result, order);Order(cur->right, depth + 1, result, order);}vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> result;int depth = 0;int order = 0;Order(root, depth, result, order);return result;}
};
下面是第一个测试样例的输出: