首页 > 其他分享 >leetcode103. 二叉树的锯齿形层序遍历,简单易懂附代码详解

leetcode103. 二叉树的锯齿形层序遍历,简单易懂附代码详解

时间:2024-07-25 23:54:22浏览次数:8  
标签:遍历 temp 层序 二叉树 leetcode103 push root 节点

leetcode103. 二叉树的锯齿形层序遍历

给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
示例 1:
在这里插入图片描述

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[20,9],[15,7]]

示例 2:
输入:root = [1]
输出:[[1]]

示例 3:
输入:root = []
输出:[]

其实我们可以把这题变得很简单,如果你会做二叉树的层序遍历的话。如果不会,可以先去看看我写的二叉树层序遍历的题解

如果学会二叉树的层序遍历方法的话,那么这题你就可以把它当作偶数层从左往右遍历,奇数层从右往左遍历,加一个栈暂时存储一层数据。

数据结构选择:使用队列queue来实现广度优先搜索(BFS),用于逐层访问二叉树的节点。对于奇数层,使用栈stack来反转节点的访问顺序。

初始化:首先检查根节点是否为空,如果为空,则直接返回空的二维向量。

层次遍历:将根节点加入队列,然后进入一个循环,直到队列为空,即所有节点都被访问过。

层级计数:使用变量n来记录当前正在访问的层级。

偶数层处理
计算当前层的节点数。
使用队列来按顺序访问当前层的所有节点,将节点值添加到临时向量temp中。
同时,将当前节点的左右子节点(如果存在)加入队列,以便下一轮访问。

奇数层处理
与偶数层类似,首先计算当前层的节点数。
但是,这里使用栈来存储节点值,然后从栈中弹出元素并添加到temp中,这样可以反转节点的访问顺序。

具体代码如下:

class Solution {
public:
    vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
    queue<TreeNode*> q;
    vector<vector<int>> res;
    if(!root) return res;
    int n=0;
    q.push(root);
    while(!q.empty())
    {
        int size=q.size();
       vector<int> temp;
        if(n%2==0)
      {  for(int i=0;i<size;i++)
        {
           TreeNode* u=q.front();
           q.pop();
           temp.push_back(u->val);
           if(u->left!=NULL)
           {
             q.push(u->left);
           }
           if(u->right!=NULL)
           { 
             q.push(u->right);
           }
        }
        res.push_back(temp);
        n++;
      }
      else
      {
          stack<int> t;
          for(int i=0;i<size;i++)
        {
           TreeNode* u=q.front();
           q.pop();
           t.push(u->val);
           if(u->left!=NULL)
           {
             q.push(u->left);
           }
           if(u->right!=NULL)
           { 
             q.push(u->right);
           }
        }
        while(!t.empty())
        {
            temp.push_back(t.top());
            t.pop();
        }
        n++;
        res.push_back(temp);
      }
    }
    return res;
    }
};

标签:遍历,temp,层序,二叉树,leetcode103,push,root,节点
From: https://blog.csdn.net/qq_51350957/article/details/140542309

相关文章

  • 二叉树的分类
    二叉树是最常见的树,二叉树的每个节点最多只有两个子节点二叉树的分类 完全二叉树 指二叉树的所有节点按照从左往右填充就像这样: 满二叉树是一种完全二叉树,当完全二叉树每个层次都被填满时,就是满二叉树例如上图中的最后一棵树堆 堆是一种带有特定排序的完全二叉......
  • 二叉树的三序遍历之非递归版
    二叉树的先序遍历/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),left(nullptr),right(n......
  • 【数据结构】二叉树
    二叉树结构描述:#include<iostream>#include<queue>usingnamespacestd;typedefintDataType;classNode{private:DataTypedata;Node*left;Node*right;friendclassBinaryTree;};typedefclassBinaryTree{private:N......
  • 算法力扣刷题记录 五十七【236. 二叉树的最近公共祖先】和【235. 二叉搜索树的最近公
    前言公共祖先解决。二叉树和二叉搜索树条件下的最近公共祖先。二叉树篇继续。一、【236.二叉树的最近公共祖先】题目阅读给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个节点p、q,最近公共祖先表示为一......
  • Java二叉树经典进阶OJ题解
     目录一、判断一颗二叉树是否为对称二叉树1.题目描述:2.代码示例:3.通过演示与分析:二、根据先序遍历结果构造二叉树1.题目描述:2.代码示例:3.通过演示与分析:三、层序遍历的非递归实现1.题目描述:2.代码示例:3.通过演示与分析:四、判断是否为完全二叉树1.题目描述:2.......
  • 【数据结构】树和二叉树
    目录1.前言2.树2.1树的概念2.2树中的重要概念2.3树的表示形式 2.4树的应用3.二叉树3.1概念3.2两种特殊的二叉树3.3二叉树的性质3.4二叉树的存储3.5二叉树的遍历方式3.5.1创建二叉树3.5.2二叉树的遍历3.6二叉树的基本操作4.总结1.前言二叉树是数据结构中......
  • LeetCode226. 翻转二叉树
    LeetCode题目链接:https://leetcode.cn/problems/invert-binary-tree/题目叙述:给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[]思路这道......
  • LeetCode102.二叉树的层序遍历
    LeetCode题目链接:https://leetcode.cn/problems/binary-tree-level-order-traversal/submissions/548489149/题目叙述:给你一个二叉树,请你返回其按层序遍历得到的节点值。(即逐层地,从左到右访问所有节点)。这道题就是简单的叫我们求层序遍历的代码,二叉树的层序遍历实际上就是......
  • 「代码随想录算法训练营」第十八天 | 二叉树 part8
    669.修剪二叉搜索树题目链接:https://leetcode.cn/problems/trim-a-binary-search-tree/题目难度:中等文章讲解:https://programmercarl.com/0669.修剪二叉搜索树.html视频讲解:https://www.bilibili.com/video/BV17P41177ud?share_source=copy_web题目状态:没有思路,看题解过......
  • 「代码随想录算法训练营」第十七天 | 二叉树 part7
    235.二叉搜索树的最近公共祖先题目链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/题目难度:中等文章讲解:https://programmercarl.com/0235.二叉搜索树的最近公共祖先.html视频讲解:https://www.bilibili.com/video/BV1Zt4y1F7ww?share_so......