Leetcode 剑指32

    思路一:用队列分层

vector> levelOrder(TreeNode* root) {

        vector>ans;//存答案

        queueq;//存取每一层数组的指针

        if(root==NULL)return ans;

        q.push(root);

        while(!q.empty()){

            vectortemp;

            for(int i=q.size();i>0;i--){//将i赋q的长度,这个长度就是这一层元素的个数,这样赋值可以记录下真正的长度,不会受到之后出入队列的影响

                TreeNode* qnode=q.front();

                q.pop();

                temp.push_back(qnode->val);

                 if(qnode->left!=NULL)q.push(qnode->left);

                 if(qnode->right!=NULL)q.push(qnode->right);//将下一层非空的结点入栈             

            }

            ans.push_back(temp);

        }

        return ans;

    }

思路二 dfs搜索元素(自己的代码被删了,引用力扣用户:我是管小亮的代码)

class Solution {

public:

    vector> levelOrder(TreeNode* root) {

        dfs(root,0);

        return res;

    }

    void dfs(TreeNode* root,int level)

    {

        if(!root) return;

        if(level>=res.size()) res.emplace_back(vector());

        res[level].emplace_back(root->val);

        dfs(root->left,res,level+1);

        dfs(root->right,res,level+1);//用leve作为记录层数。同时也是res中数组的下标,表示这个元素的数对应的是在哪一个数组。

    }

private:

vector>res;

};

你可能感兴趣的:(Leetcode 剑指32)