比上一题多两行代码,就是在装入结果集时判断当前层数是奇是偶。这题要是更改遍历的方式,按照左子树右子树,右子树左子树的方式遍历恐怕要很难处理。
// LeetCode_BinaryTreeLevelOrderTraversal.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
struct QueNode{
int num;
TreeNode *pTreeNode;
QueNode():num(0),pTreeNode(NULL){}
};
vector<vector<int> > zigzagLevelOrder(TreeNode *root) {
vector<vector<int> >ret;
vector<int> oneresult,tempResult;
if(root==NULL)
return ret;
queue<QueNode> que;
QueNode qn;
qn.num = 0;
qn.pTreeNode = root;
que.push(qn);
QueNode tempNode,tempLeftNode,tempRightNode;
int lastnum = 0;
while(!que.empty())
{
tempNode = que.front();
que.pop();
if (lastnum!=tempNode.num)
{
if(tempNode.num%2==0)
reverse(oneresult.begin(),oneresult.end());
ret.push_back(oneresult);
oneresult.clear();
oneresult.push_back(tempNode.pTreeNode->val);
lastnum = tempNode.num;
}
else
oneresult.push_back(tempNode.pTreeNode->val);
if (tempNode.pTreeNode->left)
{
tempLeftNode.num = tempNode.num+1;
tempLeftNode.pTreeNode = tempNode.pTreeNode->left;
que.push(tempLeftNode);
}
if (tempNode.pTreeNode->right)
{
tempRightNode.num = tempNode.num+1;
tempRightNode.pTreeNode = tempNode.pTreeNode->right;
que.push(tempRightNode);
}
}
if(lastnum%2!=0)
reverse(oneresult.begin(),oneresult.end());
ret.push_back(oneresult);
oneresult.clear();
return ret;
}
int _tmain(int argc, _TCHAR* argv[])
{
TreeNode *pa = new TreeNode(1);
TreeNode *pb = new TreeNode(2);
TreeNode *pc = new TreeNode(3);
TreeNode *pd = new TreeNode(4);//TreeNode *pd = NULL;//
TreeNode *pe = new TreeNode(5);
TreeNode *pf = NULL;//TreeNode *pf = new TreeNode(3);
TreeNode *pg = new TreeNode(6);
pa->left = pb;
pa->right = pc;
pb->left = pd;
pb->right = pe;
pc->left = pf;
pc->right = pg;
vector<vector<int> >ret;
//ret = levelOrder(pa);
vector<vector<int> >rret;
rret = zigzagLevelOrder(pa);
system("pause");
return 0;
}

本文介绍了一种二叉树的锯齿形层序遍历算法实现,通过记录节点所在的层级来判断是否需要反转当前层的节点值顺序。文章提供了完整的C++代码示例,并展示了如何构建一个简单的二叉树进行测试。
257

被折叠的 条评论
为什么被折叠?



