大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回锯齿形层序遍历如下:
[
[3],
[20,9],
[15,7]
]
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */
class Solution {
public:
struct Node{
int level;
TreeNode *p;
Node(int val,TreeNode *p):level(val),p(p){
};
};
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>>res;
if(root == NULL)return res;
int cnt = 0;
queue<Node>q;
deque<Node>dq;
q.push(Node(0,root));
while(!q.empty()){
while(!q.empty()){
Node t = q.front();
if(cnt == t.level){
vector<int>t;
res.push_back(t);
cnt ++;
}
res[res.size() - 1].push_back(t.p->val);
q.pop();
int level = t.level;
if((level & 1) == 0){
if(t.p->left)dq.push_back(Node(level + 1,t.p->left));
if(t.p->right)dq.push_back(Node(level + 1,t.p->right));
}
else{
if(t.p->right)dq.push_back(Node(level + 1,t.p->right));
if(t.p->left)dq.push_back(Node(level + 1,t.p->left));
}
}
while(!dq.empty()){
q.push(dq.back());
dq.pop_back();
}
}
return res;
}
};
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168702.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...