0
点赞
收藏
分享

微信扫一扫

5.1.6 二叉树的之字形层序遍历


文章目录

  • ​​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;
}
};


举报

相关推荐

0 条评论