关注
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cstring>
#include<cassert>
#include<climits>
#include<iostream>
#include<sstream>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<bitset>
#include<algorithm>
#include<iterator>
#include<string>
#include<tuple>
#include<random>
#include <chrono>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void zigzag(TreeNode* root) {
vector<TreeNode*> pts;
if (NULL == root)
return;
queue<TreeNode*> q;
q.push(root);
int num1 = 1, num2 = 0;
TreeNode* cur = NULL;
while (!q.empty()) {
cur = q.front();
q.pop();
if (cur->left != NULL) {
q.push(cur->left);
num2++;
}
if (cur->right != NULL) {
q.push(cur->right);
num2++;
}
pts.push_back(cur);
num1--;
if (0 == num1) {
pts.push_back(NULL);
num1 = num2;
num2 = 0;
}
}
int n = pts.size();
int rev = 0;
int i, j;
i = -1;
int mid, sum;
while (i < n) {
j = i + 1;
while (j < n && pts[j] != NULL)
j++;
// reverse
if (rev) {
mid = i + (j - i) / 2;
sum = i + j;
for (int x=i+1; x<=mid; x++)
swap(pts[x], pts[sum-x]);
}
rev = !rev;
i = j;
}
for (i=0; i<n; i++)
if (pts[i] != NULL)
printf(" %d ", pts[i]->val);
}
int main() {
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->right->left = new TreeNode(5);
root->right->right = new TreeNode(6);
zigzag(root);
return 0;
}
用普通的队列加标记即可实现。
查看原帖
点赞 评论
相关推荐
牛客热帖
更多
正在热议
更多
# 2025年终总结 #
126319次浏览 2129人参与
# 实习简历求拷打 #
18696次浏览 219人参与
# 找不到实习会影响秋招吗 #
1398427次浏览 13623人参与
# 哪些公司笔/面试难度大? #
6865次浏览 31人参与
# 秋招遇到的奇葩面试题 #
101065次浏览 416人参与
# 投格力的你,拿到offer了吗? #
153914次浏览 828人参与
# 秋招被挂春招仍然能投的公司 #
8313次浏览 110人参与
# 作业帮求职进展汇总 #
84537次浏览 558人参与
# 简历当中有水分算不算造假? #
154031次浏览 2250人参与
# mt对你说过最有启发的一句话 #
40231次浏览 461人参与
# 国庆前的秋招小结 #
265633次浏览 1718人参与
# 携程工作体验 #
18664次浏览 65人参与
# 什么是优秀的实习经历 #
10328次浏览 232人参与
# 选实习,你更看重哪方面? #
15921次浏览 269人参与
# 你收到了团子的OC了吗 #
1483508次浏览 11811人参与
# 摸鱼被leader发现了怎么办 #
105469次浏览 664人参与
# 找不到好工作选择GAP真的丢人吗 #
93492次浏览 1006人参与
# 担心入职之后被发现很菜怎么办 #
267177次浏览 1137人参与
# 外包能不能当跳板? #
54428次浏览 256人参与
# 秋招特别不鸣谢 #
17210次浏览 187人参与