1. 程式人生 > >O(n)複雜度:將二叉樹列印成多行

O(n)複雜度:將二叉樹列印成多行

  • 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。
  • 演算法:層次遍歷二叉樹,需要記錄每層節點數目以及初始化頭節點。
      vector<vector<int> > Print(TreeNode* pRoot) {
           vector<int> single;
            vector<vector<int> > ans;
            if(pRoot==NULL)
                return ans;
            queue<TreeNode*> que;
            TreeNode*  p = pRoot;
            que.push(p);
            //已知有頭節點 len為1 接下來判斷第二層 節點
            int count=0,len=1;
             if(p->left!=NULL)
                count++;
            if(p->right!=NULL)
                count++;
            while(!que.empty())  //層次遍歷
            {
                p = que.front();
                que.pop();
                //判斷一層節點是否遍歷結束
                if(len>1)  //未結束
                {
                    single.push_back(p->val);
                    len--;
                }
                else if(len==1)  //結束
                {
                    single.push_back(p->val);
                    ans.push_back(single);
                    len =count ;
                    count = 0;
                    single.clear();
                }
                if(p->left!=NULL)
                {
                    que.push(p->left);
                    count++;
                }
                if(p->right!=NULL)
                {
                    que.push(p->right);
                    count++;
                }
            }
            return  ans;
        }