leetcode Binary Tree Zigzag Level Order Traversal 层序遍历 双队列

来源:互联网 发布:roseonly知乎 编辑:程序博客网 时间:2024/06/01 13:18

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.

题目意思是层序输出二叉树,注意就是Z字形输出,意思是偶数行要翻转,每一行存在一个vector中。

要是直接层序输出二叉树直接一个队列就行了,但是这个要每层的结果都要单独存起来,刚开始想的是每次存节点的深度,但是被自己绕晕了。

后来想的是,直接两个队列,第一个用来输出当前层,第二个用来保存下一层,等当前层都处理完成了,就把第二层赋给当前层。

 class Solution { public: vector<vector<int>> zigzagLevelOrder(TreeNode* root){ vector<vector<int>> res; if (!root) return res;  vector<int> temp; queue<TreeNode *>Qnow; Qnow.push(root); TreeNode *node; int dep = 0;//用两个队列,Qnow和Qnext Qnow是当前的队列,Qnext是新加入的队列,等Qnow全部处理完表示这一层的都处理完了,就把Qnext给Qnow,这样就是一层一层的输出了 while (!Qnow.empty()) { temp.clear(); queue<TreeNode *>Qnext; while (!Qnow.empty()) { node = Qnow.front(); temp.push_back(node->val); Qnow.pop(); if (node->left)  Qnext.push(node->left);//先加左孩子 if (node->right) Qnext.push(node->right);//再加右孩子 } dep++; if (dep%2==0)//偶数行翻转 { reverse(temp.begin(),temp.end()); } res.push_back(temp); Qnow = Qnext; } return res; } };



0 0
原创粉丝点击