leetcode-103二叉树的锯齿形层序遍历「建议收藏」

leetcode-103二叉树的锯齿形层序遍历「建议收藏」给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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;
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168702.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月8日 下午4:46
下一篇 2022年8月8日 下午5:00


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号