您的位置:首页 > 其它

[leetcode] Binary Tree Zigzag Level Order Traversal

2015-07-13 16:11 429 查看
#include<iostream>
#include<list>
#include<queue>
#include<vector>
using namespace std;

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

class Solution
{
public:
void level(TreeNode* root)
{
deque<TreeNode*>resultnode;
deque<TreeNode*>resnode;
vector<vector<int>>resultdata;
vector<int>resdata;
TreeNode* cur=root;
resnode.push_back(cur);
bool flag=false;
while(!resnode.empty())
{
while(!resnode.empty())
{
resdata.push_back(resnode.front()->val);
if(resnode.front()->left)
resultnode.push_back(resnode.front()->left);
if(resnode.front()->right)
resultnode.push_back(resnode.front()->right);
resnode.pop_front();
}
if(flag)
reverse(resdata.begin(),resdata.end());
flag=!flag;
resultdata.push_back(resdata);
resdata.clear();
swap(resnode,resultnode);
}
for(auto i:resultdata)
for(auto j:i)
cout<<j<<' ';
cout<<endl;
}
void leve2(TreeNode* root)
{
deque<TreeNode*>resultnode;
deque<TreeNode*>resnode;
vector<vector<int>>resultdata;
vector<int>resdata;
TreeNode* cur=root;
resnode.push_back(cur);
resnode.push_back(nullptr);
bool flag=false;
while(!resnode.empty())
{
TreeNode* Node=resnode.front();
if(Node)
{
resdata.push_back(resnode.front()->val);
if(resnode.front()->left)
resnode.push_back(resnode.front()->left);
if(resnode.front()->right)
resnode.push_back(resnode.front()->right);
resnode.pop_front();
}
else
{
resnode.pop_front();
if(flag)
reverse(resdata.begin(),resdata.end());
flag=!flag;
resultdata.push_back(resdata);
resdata.clear();
if(!resnode.empty())
resnode.push_back(nullptr);
}
}
for(auto i:resultdata)
for(auto j:i)
cout<<j<<' ';
cout<<endl;
}
};

void main()
{
TreeNode* node1=new TreeNode(1);
TreeNode* node2=new TreeNode(2);
TreeNode* node3=new TreeNode(3);
TreeNode* node4=new TreeNode(4);
TreeNode* node5=new TreeNode(5);
TreeNode* node6=new TreeNode(6);
TreeNode* node7=new TreeNode(7);
/*node1->left=node2;
node1->right=node3;
node2->left=node4;
node2->right=node5;
node3->left=node6;
node3->right=node7;*/
/*node2->left=node3;
node3->right=node4;
node1->right=node5;*/
node1->left=node2;
node1->right=node3;
node3->left=node4;
node3->right=node5;
Solution solution;
solution.level(node1);
solution.leve2(node1);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: