new solution of "Binary Tree Zigzag Level Order Traversal"
This commit is contained in:
parent
174e9e47c2
commit
681ea0953e
@ -64,6 +64,13 @@ struct TreeNode {
|
||||
vector<TreeNode*> TreeToArray_level_order(TreeNode* root);
|
||||
|
||||
vector<vector<int> > zigzagLevelOrder(TreeNode *root) {
|
||||
if (random()%2){
|
||||
return zigzagLevelOrder1(root);
|
||||
}
|
||||
return zigzagLevelOrder2(root);
|
||||
}
|
||||
|
||||
vector<vector<int> > zigzagLevelOrder1(TreeNode *root) {
|
||||
vector<vector<int> > result;
|
||||
vector<TreeNode*> tree = TreeToArray_level_order(root);
|
||||
|
||||
@ -120,6 +127,35 @@ vector<TreeNode*> TreeToArray_level_order(TreeNode* root){
|
||||
return result;
|
||||
}
|
||||
|
||||
vector<vector<int> > zigzagLevelOrder2(TreeNode *root) {
|
||||
vector<vector<int> > vv;
|
||||
if(root == NULL) return vv;
|
||||
|
||||
int level = 0;
|
||||
TreeNode *last = root;
|
||||
queue<TreeNode*> q;
|
||||
|
||||
q.push(root);
|
||||
vv.push_back(vector<int>());
|
||||
while(!q.empty()) {
|
||||
TreeNode *p = q.front();
|
||||
q.pop();
|
||||
|
||||
vv[level].insert(level%2 ? vv[level].begin() : vv[level].end(), p->val);
|
||||
if(p->left) q.push(p->left);
|
||||
if(p->right) q.push(p->right);
|
||||
|
||||
if(p == last) {
|
||||
level++;
|
||||
last = q.back();
|
||||
vv.push_back(vector<int>());
|
||||
}
|
||||
}
|
||||
vv.pop_back();
|
||||
|
||||
return vv;
|
||||
}
|
||||
|
||||
void printTree_level_order(TreeNode *root)
|
||||
{
|
||||
queue<TreeNode*> q;
|
||||
|
Loading…
x
Reference in New Issue
Block a user