• Binary Tree Level Order Traversal


    思路比较简单,典型的宽度优先遍历,但是在使用vector的时候出现了些问题。先上ac代码:

        vector<vector<int> > levelOrder(TreeNode *root) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
    
            vector<vector<int> > result;
            if(root == NULL)
                return result;
            result.clear();
            vector<int> tmp;
            vector<TreeNode*> nodeVec;
            nodeVec.reserve(1000);
            nodeVec.push_back(root);
            vector<TreeNode*>::iterator head = nodeVec.begin(), tail = nodeVec.end()-1;
            while(!nodeVec.empty()){
                tmp.clear();
                while(head <= tail){
                    tmp.push_back((*head)->val);
                    if((*head)->left != NULL)
                        nodeVec.push_back((*head)->left);
                    if((*head)->right != NULL)
                        nodeVec.push_back((*head)->right);
                    head++;
                }
                result.push_back(tmp);
                nodeVec.erase(nodeVec.begin(), head);
                head = nodeVec.begin();
                tail = nodeVec.end()-1;
            }
            return result;
        }

    出现的问题需要从下面这小段代码说起:

        vector<int> v;
    //    v.reserve(100);
        v.push_back(1);
        vector<int>::iterator i = v.begin();
        cout<<*i<<endl;
        v.push_back(2);
        cout<<*i<<endl;
        list<int> l;
        l.push_back(1);
        list<int>::iterator ii = l.begin();
        cout<<*ii<<endl;
        l.push_back(2);
        cout<<*ii<<endl;
        system("pause");
        return 0;

    vector在push_back之后,由于最开始申请的空间不足,所以vector重新申请和分配空间,begin获得的指针也发生变化,所以第二次输出*i的时候每次输出的值都不相同。

    为了避免这样的问题,可以改用list,这也是list和vector的区别之一,list不需要连续的空间,所以不需要整体全部申请空间。

    另外一种解决方法是最开始就为vector分配足够的空间,比如上面的语句v.reserve(100).

  • 相关阅读:
    滚动相册
    智能拼图
    连连看
    魔法色块
    ASP.NET Session的七点认识
    从11月开始windows update速度缓慢,中国反击?
    WM实现文件关联
    与黄河老师合影
    ubuntu8.04笔记本开启无线网卡记得开网卡的电源
    无法在Web服务器上启动调试,与Web服务器通信时出现身份验证错误
  • 原文地址:https://www.cnblogs.com/waruzhi/p/3346806.html
Copyright © 2020-2023  润新知