首页 > 其他分享 >leetcode102-二叉树的层序遍历

leetcode102-二叉树的层序遍历

时间:2022-10-30 11:00:37浏览次数:77  
标签:right TreeNode res 层序 sss 二叉树 leetcode102 push root

102. 二叉树的层序遍历

有两种实现方法。第一种是递归,第二种是队列实现。第一种是看了别人的代码写出来的,第二种是自己写的。这道题的不能直接把遍历得到的数字直接塞进res里,需要区分不同的层次。所以返回的是二维vector

递归 

index用来表示这是第几层,要放到哪一个一维数组

class Solution {
public:
    vector<vector<int>> res;
    void Tracking(TreeNode* root,int index)
    {
        if(root==nullptr) return;
        if(index>=res.size())
        {
            res.push_back(vector<int>());
        }
        res[index].push_back(root->val);
        Tracking(root->left,index+1);
        Tracking(root->right,index+1);
    }
    vector<vector<int>> levelOrder(TreeNode* root) {
        if(root==nullptr) return {};
        Tracking(root,0);
        return res;
    }
};

 

层序遍历队列实现没什么好说的,但是第一次写的代码用while循环忘记size--,就一直显示显示runtime error: member access within misaligned address 0xbebebebebebebebe for type 'TreeNode'错误,看了很久都看不出来。

/**
 * 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:
    vector<vector<int>> levelOrder(TreeNode* root) {
        if(root==nullptr) return {};
        queue<TreeNode*> sss;
        vector<vector<int>> res;
        sss.push(root);
        while(!sss.empty())
        {
            int size=sss.size();
            vector<int> temp;
            for(int i=0;i<size;i++)
            {
                TreeNode *t=sss.front();
                sss.pop();
                temp.push_back(t->val);
                if(t->left) sss.push(t->left);
                if(t->right) sss.push(t->right);
            }
            res.push_back(temp);
        }
        return res;
        /*queue<TreeNode*> sss;
        vector<vector<int>> res;
        if(root!=nullptr) sss.push(root);
        while(!sss.empty())
        {
            int size=sss.size();
            vector<int> temp;
            while(size>0)
            {
                TreeNode* t=sss.front();
                sss.pop();
                temp.push_back(t->val);//这里标了红色波浪线
                if(t->left) sss.push(t->left);
                if(t->right) sss.push(t->right);
                size--;
            }
            res.push_back(temp);
        }
        return res;*/
    }
};

 

标签:right,TreeNode,res,层序,sss,二叉树,leetcode102,push,root
From: https://www.cnblogs.com/uacs2024/p/16840721.html

相关文章

  • 刷题 LeetCode二叉树2
    代码随想录LeetCode102.二叉树的层序遍历carl二叉树遍历#层序遍历#队列#广度优先思路队首是待访问节点,每访问一个节点,将其左子和右子加入队列细节如何知道某......
  • 树、森林与二叉树的互相转换
    1.树转为二叉树(1)从根节点往下开始,所有兄弟节点间连接虚线。(2)擦掉除根节点所连最左边的那条线以外的同层所有实线。(3)实线作为lchild所连的线,虚线作为rchild所连的线,全部......
  • leetcode94-二叉树的中序遍历
    94.二叉树的中序遍历迭代法,看别人的代码的,还需要琢磨一下/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;......
  • 代码随想录第十七天 | 二叉树
    今天继续二叉树的学习 110.平衡二叉树classSolution{publicbooleanisBalanced(TreeNoderoot){returndfs(root)>=0;}publicintdfs(......
  • 平衡二叉树、B树、B+树的区别
    1、平衡二叉树  2.B树  3.B+树  B+、B和平衡二叉树的区别:1)b,b+相对于平衡二叉树,节点可以存储多个元素,因此整体可以存储较多的数据,并且树的高度也会矮,可以减......
  • leetcode145-二叉树的后序遍历
    145.二叉树的后序遍历classSolution{public:vector<int>res;voidTracking(TreeNode*root){if(root==nullptr)return;Tracking......
  • 二叉树的其他重要操作
    二叉树的其他重要操作1,建树代码:1//建树2voidpre(tree&bt)//先序次序输入3{4charch;5ch=getchar();//单链表存储结构,bt为指向根结点......
  • 二叉树路径问题: 合集--所有路径-路径总和-路径总和 II-路径总和 III-最大路径和
    文章目录​​[257.二叉树的所有路径](https://leetcode-cn.com/problems/binary-tree-paths/)​​​​[112.路径总和](https://leetcode-cn.com/problems/path-sum/)​​......
  • 剑指offer - 面试题6:重建二叉树
    packageChapter2;/***面试题6:重建二叉树*输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。*假设输入的前序遍历和中序遍历的结果中都不含重复的数字。*......
  • 静态二叉树建立
    #defineSZ(x)(int)(x.size())constintinf=0x3f3f3f3f;strings="ab##C##";structNode{intval;intl,r;Node(){val=inf;}......