【LeetCode笔记】Binary Tree Level Order Traversal 二叉树分层存储

来源:互联网 发布:大数据hadoop应用 编辑:程序博客网 时间:2024/05/29 06:46

思路:

1.分层->想到广度优先搜索->使用队列

2.在广度优先搜索中,难点在于怎么判断队列中一层节点的开始和结束。本来打算统计,但是看到有更好的思路是,当把上一层根节点全部取出来时,队列中剩余的刚好全部是当前这一层的所有节点。所以此时只需要计算一下队列的大小(假设大小为size),那么接下来需要对队列进行size次的pop(取出当前这一层的全部节点,一共size个),并存入临时的vector中;同时进行size次的push,把当前节点的左右子树都压入队列。这样当把这一层的节点全部pop出来时,队列里剩下的就全部是下一层的节点了。

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:        vector<vector<int>> levelOrder(TreeNode* root) {        vector<vector<int>> v;        if(root==NULL)            return v;        //else if(root->left==NULL&&root->right==NULL){        //    v[0].push_back(root->val);        //    return v;        //}        else{            TreeNode* p;            queue<TreeNode*> q;            q.push(root);            while(!q.empty()){                int size = q.size();                vector<int> v2;                int i = 0;                while(i<size){                    p = q.front();                    q.pop();                    v2.push_back(p->val);                    if(p->left!=NULL)                        q.push(p->left);                    if(p->right!=NULL)                        q.push(p->right);                    i++;                }                v.push_back(v2);            }            return v;        }    }};

以及,当LeetCode报一些奇奇怪怪的错误的时候,多让程序打印输出比较容易知道问题出在哪(或者转移到本地调试)。

ps:今天还遇到了一个特别奇葩的问题

Line 68: expected '}' at end of input    可是明明我的代码才34行。。。

后来本地编译了一下,发现是一个if的反括号漏掉了,真是。。。好好反思

0 0
原创粉丝点击