您的位置:首页 > 其它

[LeetCode]Binary Tree Zigzag Level Order Traversal

2015-11-30 14:42 429 查看
题目解析:(链接)

Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).

For example:
Given binary tree
{3,9,20,#,#,15,7}
,

3
/ \
9  20
/  \
15   7


return its zigzag level order traversal as:

[
[3],
[20,9],
[15,7]
]


confused what
"{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.

解题思路:

递归版:

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
travel(root, 1);
bool flag = false;
for (auto &i : result) {
if (flag) {
reverse(i.begin(), i.end());
}
flag = !flag;
}

return result;
}

void travel(TreeNode *root, int level) {
if (!root) return;

if (level > result.size()) {
result.push_back(vector<int>());
}

result[level - 1].push_back(root->val);
travel(root->left, level + 1);
travel(root->right, level + 1);
}
private:
vector<vector<int>> result;
};


迭代版:

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>> result;
if (!root) return result;

queue<TreeNode *> current, next;
vector<int> level;
current.push(root);
while (!current.empty()) {
while(!current.empty()) {
TreeNode *tmp = current.front();
current.pop();
level.push_back(tmp->val);

if (tmp->left != nullptr) next.push(tmp->left);
if (tmp->right != nullptr) next.push(tmp->right);
}

result.push_back(level);
level.clear();
swap(current, next);
}

bool flag = false;
for (auto &i : result) {
if (flag) {
reverse(i.begin(), i.end());
}
flag = !flag;
}

return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: