From 681ea0953e5b2d1f30b978e59962ae18f9748de0 Mon Sep 17 00:00:00 2001 From: xusiwei1236 Date: Sun, 18 Oct 2015 15:02:36 +0800 Subject: [PATCH] new solution of "Binary Tree Zigzag Level Order Traversal" --- .../binaryTreeZigzagLevelOrderTraversal.cpp | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/algorithms/cpp/binaryTreeZigzagLevelOrderTraversal/binaryTreeZigzagLevelOrderTraversal.cpp b/algorithms/cpp/binaryTreeZigzagLevelOrderTraversal/binaryTreeZigzagLevelOrderTraversal.cpp index 63cdec9..7409c87 100644 --- a/algorithms/cpp/binaryTreeZigzagLevelOrderTraversal/binaryTreeZigzagLevelOrderTraversal.cpp +++ b/algorithms/cpp/binaryTreeZigzagLevelOrderTraversal/binaryTreeZigzagLevelOrderTraversal.cpp @@ -64,6 +64,13 @@ struct TreeNode { vector TreeToArray_level_order(TreeNode* root); vector > zigzagLevelOrder(TreeNode *root) { + if (random()%2){ + return zigzagLevelOrder1(root); + } + return zigzagLevelOrder2(root); +} + +vector > zigzagLevelOrder1(TreeNode *root) { vector > result; vector tree = TreeToArray_level_order(root); @@ -120,6 +127,35 @@ vector TreeToArray_level_order(TreeNode* root){ return result; } +vector > zigzagLevelOrder2(TreeNode *root) { + vector > vv; + if(root == NULL) return vv; + + int level = 0; + TreeNode *last = root; + queue q; + + q.push(root); + vv.push_back(vector()); + 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()); + } + } + vv.pop_back(); + + return vv; +} + void printTree_level_order(TreeNode *root) { queue q;