求二叉樹的深度
C++
class Solution {
public:
int TreeDepth(TreeNode* root) {
if (root == NULL) return 0;
return max(TreeDepth(root->left), TreeDepth(root->right)) + 1;
}
};
上面爲參考代碼
下面爲實際遇到的一些問題,
首先是root == NULL 的問題,NULL在C++11之後的版本是不推薦使用的,官方給出的解決辦法是利用nullptr,下面是Primer第五版原話:
過去的程序還會用到一個名爲NULL的預處理變量(preprocessor variable)來給指針賦值,這個變量在頭文件cstdlib中定義,它的值就是0。
當用到一個預處理變量時,預處理器會自動地將它替換成實際值,因此用NULL初始化指針和用0初始化指針是一樣的。在新標準下,現在C++程序最好使用nullptr,同時儘量避免使用NULL。
第二個問題是函數max()的問題,VS不支持max()
標準庫在頭中定義了兩個模板函數std::min() 和 std::max()。通常用它可以計算某個值對的最小值和最大值。
可惜在 Visual C++ 無法使用它們,因爲沒有定義這些函數模板。原因是名字min和max與<windows.h>中傳統的min/max宏定義有衝突。爲了解決這個問題,Visual C++ 定義了另外兩個功能相同的模板:_cpp_min() 和 _cpp_max()。我們可以用它們來代替std::min() 和 std::max()。