4.2 leetcode -2 binary-tree-zigzag-level-order-traversal

来源:互联网 发布:乐高42056淘宝 编辑:程序博客网 时间:2024/06/10 02:52
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.

OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
1
/ \
2 3
/
4
\
5

The above binary tree is serialized as"{1,2,3,#,#,4,#,#,5}".


这个题目就是让我实战一次分层遍历的,然后至于Z字型,只需要翻转就行了

/** * Definition for binary tree * 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) {         queue<TreeNode*> node;         vector<vector<int> > vreturn;                  bool flag = true;//0-left-right         int ceil_num = 0;         int ceil_numtmp = 0;         if(root != NULL )             {             ceil_num = 1;             node.push(root);                      }         else            return vreturn;                 while(!node.empty())             {             vector<int> numvector(ceil_num);                          for(int i = 0;i < ceil_num;i++)                 {                 TreeNode *now = node.front();                 numvector[i] = now->val;                 node.pop();                 if(now->left != NULL)                     {                     ceil_numtmp ++;                     node.push(now->left);                 }                 if(now->right != NULL)                     {                     ceil_numtmp ++;                     node.push(now->right);                 }             }             flag = !flag;             if(flag == true)                 {                 //reverse                 for(int i = 0;i < (ceil_num/2);i++)                     {                     int tmp = numvector[ceil_num -i - 1];                     numvector[ceil_num -i - 1] = numvector[i];                     numvector[i] = tmp;                 }             }             vreturn.push_back(numvector);             ceil_num = ceil_numtmp;             ceil_numtmp = 0;         }        return vreturn;    }};



原创粉丝点击