在知乎看到今日頭條的一個面試題“求二叉樹第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