二叉树的锯齿形层次遍历
二叉树的锯齿形层次遍历
问题描述
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回锯齿形层次遍历如下:
[
[3],
[20,9],
[15,7]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal
思路
- 首先,将二叉树进行普通的层次遍历,并将结果存在vector<vector
> ret中。
详情见 https://www.irene.ink/admin/write-post.php?cid=77 - 如果i是奇数,将ret[i]进行反转,然后就可以得到最终结果。
题解
class Solution {
public:
vector<vector<int>> ret;
vector<vector<int>> zigzagLevelOrder(TreeNode *root) {
dfs(root, 0);
int n=ret.size();
for(int i=0;i<n;i++){
if(i%2!=0){
reverse(ret[i].begin(),ret[i].end());
}
}
return ret;
}
void dfs(TreeNode *node, int level) {
if (node == nullptr) return;
if (level + 1 > ret.size()) ret.push_back(vector<int>());
ret[level].push_back(node->val);
if (node->left != nullptr)dfs(node->left, level + 1);
if (node->right != nullptr) dfs(node->right, level + 1);
}
};