文章目录
- 1.题目
- 2.代码
1.题目
- 题目要求
- 思路:最简单直接的方法就是利用层序遍历,并使用一个变量 cnt 来统计当前的层数(从0开始),将所有的奇数层的结点值进行翻转一下即可
- eg
For example:
Given binary tree [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its zigzag level order traversal as:
[
[3],
[20,9],
[15,7]
]
2.代码
class Solution{
vector<vector<int>> zigzagLevelOrder(TreeNode* root)
{
vector<vector<int>> result;
int level=0;
transefunction(result,level,root);
return result;
}
void transefunction(vector<vector<int>>& result, int level, TreeNode* node)
{
if (!node) return;
if (result.size() == level) result.push_back(vector<int>());
int singleordouble=0;
if (singleordouble%2 == 0)
tempresult[level].push_back(node->val);
else
tempresult[level].insert(tempresult[level].begin(), node->val);
if (node->left) transefunction(result,level+1,node->left);
if (node->right) transefunction(result,level+1,node->right);
}
};
class Solution{
vector<vector<int>> zigzagLevelOrder(TreeNode* root)
{
vector<vector<int>> result;
deque<TreeNode*> deq;
int sigleordouble=0;
deq.push(root);
while(!deq.empty())
{
vector<int> tmpresult;
for (int i=deq.size();i>0;--i)
{
TreeNode* pre=deq.front();
deq.pop();
tmpresult.push_back(pre->val);
if (pre->left) deq.push(pre->left);
if (pre->right) deq.push(pre->right);
}
if (sigleordouble%2!=0)
reverse(tmpresult.begin().tmpresult.end());
result.push_back(tmpresult);
sigleordouble++;
}
return result;
}
};