求二叉樹第n層節點數


在知乎看到今日頭條的一個面試題“求二叉樹第n層節點數”:https://zhuanlan.zhihu.com/p/25671699,想到了這樣一個解法,歡迎大家交流

 

我的解法采用遞歸的思想,從0層開始,逐層往下遞歸。然后達到遞歸終止條件時(cur == goal - 1),就會把n-1層的所有兒子數都統計上來,代碼如下:

 1 int CountChildNum(Tree *t, int n)
 2 {
 3     if(NULL == t)
 4         Error("fatal error");
 5     if(n == 0)
 6         return 1;
 7     return CountChild(t, 0, goal);
 8 }
 9 
10 //cur:遞歸到的當前層, goal:目標層
11 int CountChild(Tree *t, int cur, int goal)
12 {
13     if(NULL == t || cur >= goal)
14         return 0;
15     
16     int c = 0;
17     if(cur == goal - 1) //此時t的兒子即為想要的層數
18     {
19         if(t -> left != NULL)
20             ++c;
21         if(t -> right != NULL)
22             ++c;
23     }
24     else
25     {
26         c += CountChild(t -> left, cur + 1, goal);
27         c += CountChild(t -> right, cur + 1, goal);
28     }
29     return c;
30 }

 

這里有更好的解法:

http://www.cnblogs.com/hapjin/p/5505988.html

輕松搞定面試中的二叉樹題目

http://blog.csdn.net/luckyxiaoqiang/article/details/7518888

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM