統計乙個二叉樹的每一層 節點個數 佇列,遞迴

2021-08-11 11:27:41 字數 822 閱讀 9210

今天遇到乙個問題就是利用佇列求解二叉樹的某一層的節點個數,乍一看感覺蠻簡單,一上手讓我有點頭涼涼。

首先要解決的問題就是如何在佇列中用標誌來對二叉樹進行分層,腦子裡雖然有個大概的思路,弄幾個迴圈,再來幾個變數控制,也忒麻煩了。找了下部落格也沒看懂多少,高樂高還是給整出來了。思路如下。

emmmmm,我們不知道如何解決層的問題,再細分就是需要知道某一層有多少個,也就間接解決了層的問題。有點繞啊,不賣關子了,直接說了。

兩個數,int curcount(來記錄當前層的節點個數), int nextcount(來記錄下一層的節點個數);

顯然,curcount的初始值為1,因為只有乙個根結點,而nextcount由於未知,故置為0.

void count_tree(tnode *root,int level)//level 傳進來的層數

if(temp->rchild !=

null)

if(curcount ==

0) }

}

再來個遞迴版的

遞迴啊就無腦遞迴就行了傳個引數當當前的層數與所要求相同,個數加加。

**如下

int count_tree(tnode *root, int depth, int k, int

*number)

count(root->lchild, depth + 1, k, number);

count(root->rchild, depth + 1, k, number);

return

*number;

}

二叉樹層次遍歷 Queue 每一層乙個NULL標記

請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。思路 乙個queue 每一層乙個null標記 即可。每當佇列頭部檢測到null時,代表上一層的遍歷已經結束,此時佇列中存放的是下一層的節點,所以要在佇列尾部...

二叉樹的節點個數 葉子節點個數 第k層的節點個數

class binarytreenode public class nodesstatistics 求二叉樹中葉子節點的個數 1 如果二叉樹為空,返回0 2 如果二叉樹不為空,返回1 3 如果二叉樹不為空,且左右子樹不同時為空,返回左子樹中葉子節點個數加上右子樹中葉子節點個數。param root ...

列印二叉樹某一層的節點

按層非遞迴遍歷二叉樹是一道常見的題目,程式設計之美上有乙個列印出二叉樹某一層的節點的問題,稍稍有意思。在程式設計之美上,提到了兩種解法 1 一種是遞迴解法 void translevel node root,int level 2 另一種則是利用佇列的非遞迴解法 如果只是簡單的按層遍歷的話,可以用乙...