struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class levelOrderIter {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>>res;
queue<TreeNode*> qe;
TreeNode*curr = root;
if (curr != NULL) {
qe.push(curr);
}
while (!qe.empty()) {
vector<int> lv;
int level = qe.size();
for (int i = 0; i < level; ++i) {
curr=qe.front();
qe.pop();
lv.push_back(curr->val);
if (curr->left != NULL) {
qe.push(curr->left);
}
if (curr->right != NULL) {
qe.push(curr->right);
}
}
res.push_back(lv);
}
return res;
}
};
class levelOrderRecur {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ans;
pre(root, 0, ans);
return ans;
}
void pre(TreeNode *root, int depth, vector<vector<int>> &ans) {
if (!root) return;
if (depth >= ans.size())
ans.push_back(vector<int> {});
//前序、中序及後序遍歷一樣,因爲插入的位置是確定的
ans[depth].push_back(root->val);
pre(root->left, depth + 1, ans);
pre(root->right, depth + 1, ans);
}
};
二叉樹層序遍歷
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.