當前位置:編程學習大全網 - 源碼下載 - c樹源代碼

c樹源代碼

樓主妳好!

這是我的思路:

a,b)表示根節點

c)說明這是壹棵完整的二叉樹,少於最後壹層。

我覺得解決A和B的條件有很多方法,這裏最簡單的方法就是把每壹層從小到大排序。

因此,第壹步是對數組進行排序(快速排序,插入排序.....任何種類)在nlgn。

第二步是完全二叉樹的插入方法,可以通過水平遍歷來擴展,這裏就不細說了。

第三步,統計葉節點值,輸出葉節點值(這個太簡單了,只輸出左右為空的節點。)

完整代碼:

忽略排序步驟。

# include & ltiostream & gt

# include & lt隊列& gt

使用?命名空間?std

struct?結節

{

int?價值;

節點*?左;

節點*?對;

node(int?val):value(val),left(NULL),right(NULL){}

};

struct?樹

{

節點*?根;

Tree():root(NULL){}

};

節點*?HorizInsert(node*?根,節點*?z)

{

如果(!根)

{

root = z;

回歸?根;

}

隊列& ltnode * & gt?q;

q.push(根);

而(!q.empty())

{

節點*?front = q . front();

q . pop();

if(Front-& gt;left==NULL)

{

正面-& gt;左= z;

回歸?根;

}

if(Front-& gt;right==NULL)

{

正面-& gt;右= z;

回歸?根;

}

if(Front-& gt;左)

q . push(Front-& gt;左);

if(Front-& gt;右)

q . push(Front-& gt;對);

}

回歸?根;

}

作廢?HorizPrint(node*?根)

{

如果(!root)?回歸?;

隊列& ltnode * & gt?q;

q.push(根);

int?calc = 0;

cout & lt& lt“那個?葉子:“;

而(!q.empty())

{

節點*?front = q . front();

q . pop();

如果(!正面-& gt;向左?& amp& amp?!正面-& gt;右)

{

++ calc;

cout & lt& lt正面-& gt;價值& lt& lt'?';

}

if(Front-& gt;左)

q . push(Front-& gt;左);

if(Front-& gt;右)

q . push(Front-& gt;對);

}

cout & lt& ltendl & lt& lt“Ther?號碼?的?葉子:?”& lt& ltcalc & lt& ltendl

}

作廢?主()

{

int?Array[]={1,2,3,4,5,6,7,8,9,10,11 };

int?len = sizeof(Array)/sizeof(Array[0]);

樹*?t =新?樹;

for(int?I = 0;我& ltlen++i)

t->;root = HorizInsert(T-& gt;根,新的?node(Array[I]);

HorizPrint(T-& gt;根);

}

  • 上一篇:平頂山名門世家小區周邊配套怎麽樣?
  • 下一篇:網站能給我壹個嗎?
  • copyright 2024編程學習大全網