青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天之道

享受編程的樂趣。
posts - 118, comments - 7, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

二叉樹之數組存儲

Posted on 2012-10-16 23:47 hoshelly 閱讀(1570) 評論(0)  編輯 收藏 引用 所屬分類: ProgrammingDS && Algorithm
二叉樹可以采用數組的方法進行存儲,把數組中的數據依次自上而下,自左至右存儲到二叉樹結點中,一般二叉樹與完全二叉樹對比,比完全二叉樹缺少的結點就在數組中用0來表示

結點存儲的數據均為非負整數

Input

第一行輸入一個整數t,表示有t個二叉樹

第二行起,每行輸入一個數組,先輸入數組長度,再輸入數組內數據,每個數據之間用空格隔開,輸入的數據都是非負整數

連續輸入t行

Output

每行輸出一個示例的先序遍歷結果,每個結點之間用空格隔開

Sample Input

3
3 1 2 3
5 1 2 3 0 4
13 1 2 3 4 0 5 6 7 8 0 0 9 10
Sample Output

1 2 3 
1 2 4 3 
1 2 4 7 8 3 5 9 10 6 

分析:
這道題的關鍵在于:設定數組位置從1開始編號,那么位置為i的結點,它的左孩子在數組的位置是2i,右孩子在數組的位置是2i+1

這道題的難點在把樹建立起來,其他都容易。

代碼:

#include <iostream> 
using namespace std;

class BiTreeNode
{

private:

 BiTreeNode  *leftChild;      //左子樹指針

 BiTreeNode  *rightChild;      //右子樹指針

public:

 int  data;           //數據域


 
//構造函數和析構函數

 BiTreeNode():leftChild(NULL), rightChild(NULL){}

 BiTreeNode(int  item, BiTreeNode  *left = NULL, 

    BiTreeNode  *right = NULL):

    data(item), leftChild(left), rightChild(right){}

 ~BiTreeNode(){}


 BiTreeNode  * &Left(void//注意返回值類型為指針的引用類型

  {return leftChild;}

 BiTreeNode  * &Right(void//注意返回值類型為指針的引用類型

  {return rightChild;}

};




class BiTree

{

private:

 BiTreeNode  *root;       //根結點指針

    int i,len; //len是樹結點的數量

 void Destroy(BiTreeNode  * &t);

 void PreOrder(BiTreeNode  * &t);

 void  CreateBiTree(BiTreeNode * &T,const int arrTree[],int pos);

public:

 //構造函數和析構函數

 BiTree(void):root(NULL),i(0){};     //構造函數

 ~BiTree(void){};        //析構函數


 
//構造二叉樹

   void MakeTree(const int arrTree[],int num); //構造二叉樹,利用先序遍歷結果建樹

   void Destroy(void);        //銷毀二叉樹


 void PreOrder();  //前序遍歷 

};


//2、定義銷毀函數

void BiTree ::Destroy(void)       //銷毀二叉樹,公有函數

{

 Destroy(root);

}


void BiTree ::Destroy(BiTreeNode  * &t)             

//銷毀二叉樹,私有函數供共有函數調用

{

 if(t != NULL && t->Left() != NULL)

  Destroy(t->Left());


 if(t != NULL && t->Right() != NULL)

  Destroy(t->Right());


 if(t != NULL)

 {
  delete t;
 }

}


//3、定義建樹函數

void BiTree::MakeTree(const int arrTree[],int num)

//構造二叉樹,利用先序遍歷結果建樹,公有函數

{

   i=0;
   len = num;

   CreateBiTree(root,arrTree,1);//數組位置從1開始

}


void BiTree::CreateBiTree(BiTreeNode * &T, const int arrTree[],int pos)   //遞歸建樹私有函數

{

 int ch;

 ch=arrTree[pos]; 

 if (ch == 0 || pos > len) T = NULL;

 else 

 {

  T=new BiTreeNode();

  T->data = ch;              // 生成根結點
  i++;
  if(i>len) return;

  CreateBiTree(T->Left(), arrTree,2*pos);   // 構造左子樹

  CreateBiTree(T->Right(), arrTree,2*pos+1);   // 構造右子樹

   } 

}

//4、定義先序遍歷函數

void BiTree::PreOrder()

//前序遍歷訪問二叉樹,公有函數

{

 PreOrder(root);

}


void BiTree::PreOrder(BiTreeNode* &t)

//前序遍歷訪問二叉樹,私有函數t

{


  if(t!=NULL)//若二叉樹結點不為空,執行如下操作:
  {
      cout<<t->data<<" ";//1、輸出當前結點的數據,表示該結點被訪問了

      PreOrder(t->Left());//2、先序遍歷該結點的左孩子

      PreOrder(t->Right());//3、先序遍歷該結點的右孩子
  }


}

int main()
{
    int m,i,j,k;
    int *arrTree;
    BiTree myTree;
    cin>>m;
    for(i=0;i<m;i++)
    {
        arrTree = new int[800];
        cin>>k;
        for(j=1;j<=k;j++)
            cin>>arrTree[j];
        myTree.MakeTree(arrTree,k);
        myTree.PreOrder();
        cout<<endl;
        
        delete []arrTree;
        myTree.Destroy();
    }
    return 0;
}
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线视频精品一| 一道本一区二区| 久久久国产午夜精品| 亚洲精品影院在线观看| 亚洲欧洲一区二区在线播放| 久久国产精品一区二区三区四区| 亚洲欧美中文另类| 久久久久久久久岛国免费| 久久亚洲精品伦理| 亚洲第一页自拍| 亚洲精品影院在线观看| 亚洲一区二区视频在线| 久久精品国产综合精品| 欧美国产丝袜视频| 国产精品日韩久久久| 国内精品久久久久久| 亚洲日本国产| 亚洲综合清纯丝袜自拍| 久久精品一二三| 亚洲国内高清视频| 亚洲一区亚洲| 欧美成人精品福利| 欧美性视频网站| 国产主播精品在线| 亚洲乱码精品一二三四区日韩在线 | 国产日韩精品久久久| 99精品热6080yy久久| 亚洲精品久久| 亚洲欧美久久久久一区二区三区| 久久婷婷蜜乳一本欲蜜臀| 欧美日韩久久久久久| 狠狠色狠狠色综合| 亚洲天堂男人| 久久久久国产精品一区| 99视频精品在线| 欧美~级网站不卡| 国产亚洲人成a一在线v站 | 亚洲国产精品va| 性色av一区二区怡红| 欧美日韩一区二区三区在线观看免| 一区在线观看| 欧美在线综合| 中文国产成人精品久久一| 欧美成人嫩草网站| 在线视频观看日韩| 久久综合九色综合久99| 欧美一区二区三区免费观看视频 | 亚洲小说春色综合另类电影| 欧美成人综合一区| 久久久www成人免费毛片麻豆| 国产精品视频久久| 亚洲影院在线观看| 99精品视频免费观看视频| 欧美成人午夜| 最新日韩在线| 欧美激情一区二区三级高清视频| 久久精品视频播放| 国产一区二区三区无遮挡| 亚洲欧美日韩另类| 亚洲砖区区免费| 欧美性猛交视频| 欧美在线播放高清精品| 亚洲在线视频观看| 国产日韩一级二级三级| 久久精品伊人| 久久免费视频这里只有精品| 亚洲盗摄视频| 欧美激情麻豆| 欧美日韩亚洲一区二区| 亚洲女与黑人做爰| 亚洲免费视频网站| 激情小说另类小说亚洲欧美| 蜜桃av一区二区三区| 欧美成人亚洲| 亚洲自拍高清| 午夜精品成人在线视频| 国产一区二区精品久久91| 久久亚洲精品一区二区| 免费短视频成人日韩| 一本一本a久久| 亚洲成人资源网| 亚洲国产片色| 国产精品成人在线观看| 亚洲欧洲av一区二区三区久久| 亚洲欧美日韩国产一区| 激情欧美亚洲| 亚洲精品综合在线| 国产欧美精品在线| 欧美aⅴ99久久黑人专区| 欧美日韩成人在线播放| 久久久国产成人精品| 欧美二区在线看| 欧美一级二级三级蜜桃| 麻豆成人在线| 欧美在线网站| 欧美精品一区二区视频| 欧美在线一级va免费观看| 免费黄网站欧美| 午夜在线播放视频欧美| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲综合色丁香婷婷六月图片| 久久免费观看视频| 欧美中文字幕第一页| 欧美精品三区| 久久一区二区三区四区五区| 欧美日韩一区二区三区| 免费国产自线拍一欧美视频| 国产精品久久看| 夜夜嗨av一区二区三区四区| 午夜在线不卡| 一区二区三区视频在线播放| 久久裸体艺术| 久久aⅴ乱码一区二区三区| 欧美日本韩国一区| 欧美激情导航| 狠狠色丁香久久婷婷综合_中| 日韩视频一区二区在线观看| 亚洲国产日韩在线| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲欧美日韩在线不卡| 日韩一区二区福利| 91久久精品国产91性色tv| 午夜精品区一区二区三| 亚洲永久精品国产| 欧美日韩另类丝袜其他| 欧美福利视频网站| 在线欧美一区| 久久精品国产视频| 亚洲欧美久久久| 国产亚洲精品综合一区91| 欧美精品在线极品| 欧美一级夜夜爽| 夜夜嗨av一区二区三区网站四季av| 久久久免费观看视频| 亚洲新中文字幕| 亚洲欧美成人一区二区在线电影| 黄色av成人| 狠狠色狠狠色综合日日五| 国产精品大片| 欧美韩日视频| 老司机一区二区| 久久精品国产久精国产思思| 久久久久www| 欧美成人一区二区| 欧美激情综合五月色丁香小说| 国产精品sss| 久久美女艺术照精彩视频福利播放| 午夜视频久久久久久| 国产亚洲午夜| 亚洲电影在线免费观看| 男女视频一区二区| 欧美日韩国产小视频在线观看| 午夜亚洲精品| 午夜精品美女久久久久av福利| 亚洲欧美日韩在线高清直播| 国产精品久久久久久久7电影| 亚洲一区日韩| 久久久成人精品| 亚洲日本中文字幕| 欧美国产第一页| 亚洲人成亚洲人成在线观看图片 | 在线一区二区三区四区| 亚洲综合色噜噜狠狠| 欧美日韩免费一区| 欧美在线www| 亚洲精品看片| 欧美凹凸一区二区三区视频| 在线观看一区视频| 欧美夫妇交换俱乐部在线观看| 亚洲日本欧美天堂| 香蕉久久精品日日躁夜夜躁| 好吊色欧美一区二区三区四区| 欧美成人免费在线视频| 亚洲视频一区| 欧美国产视频在线| 午夜视频在线观看一区| 极品日韩久久| 国产精品久久久久免费a∨| 久久精品视频免费| 日韩亚洲精品视频| 久久精品免费播放| 一区二区欧美国产| 极品日韩久久| 国产视频久久| 欧美性久久久| 欧美日韩国产色站一区二区三区| 羞羞色国产精品| 亚洲美女av在线播放| 免费久久99精品国产| 久久久久99精品国产片| 在线一区视频| 亚洲另类在线视频| 亚洲国产成人av在线| 国产日韩欧美在线观看| 欧美视频在线不卡| 欧美日韩精品一二三区| 欧美成人三级在线| 欧美本精品男人aⅴ天堂| 久久成人精品电影| 欧美一级视频免费在线观看|