您的位置:首页 > 其它

LeetCode: 103_Binary Tree Zigzag Level Order Traversal | 二叉树Zigzag层次遍历 | Medium

2014-11-27 16:37 603 查看
本题也属于层次遍历的变形,不同之处在于其遍历的方法是交替进行的,形成一个ZigZag的曲线形式,如下:





代码如下:

struct TreeNode {
int            val;
TreeNode*    left;
TreeNode*    right;
TreeNode(int x): val(x), left(NULL),right(NULL) {}
};

void Swap(vector<int> &ivec)
{
int temp = 0;
int len = ivec.size();
for (int i = 0; i < len/2; i ++) {
temp = ivec.at(i);
ivec.at(i) = ivec.at(len-1-i);
ivec.at(len-1-i) = temp;
}
}

vector<vector <int> > zigzagLevelOrder(TreeNode *root)
{
vector<vector<int> > tree_vector;
vector<int> ivec;
queue<TreeNode *> tree_queue;
if (NULL == root)
return tree_vector;

tree_queue.push(root);
tree_queue.push(NULL);
int nLevelCount = 1;
while (true) {
TreeNode *pTemp = tree_queue.front();
tree_queue.pop();
if (pTemp == NULL) {
if (nLevelCount%2 == 0) { //if the num of level is odd, swap the ivec;
Swap(ivec);
}
tree_vector.push_back(ivec);
ivec.clear();
if (tree_queue.empty())
break;
tree_queue.push(NULL);
nLevelCount ++;
}
else {
ivec.push_back(pTemp->val);
if (pTemp->left)
tree_queue.push(pTemp->left);
if (pTemp->right)
tree_queue.push(pTemp->right);
}
}
return tree_vector;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐