uacs2024

导航

leetcode102-二叉树的层序遍历

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;*/
    }
};

 

posted on 2022-10-30 10:51  ᶜʸᵃⁿ  阅读(18)  评论(0编辑  收藏  举报