問題解決言語:C言語
思考の一般的なフレームワークは、二分木のルートノードの左右のサブツリーの深さを計算し、比較することです。大きい方が二分木の最大の深さです( 1とルートノードレベルを追加します)。
私の最初の解決策を見てみましょう
int maxDepth(struct TreeNode* root)
{
if(root==NULL)
{
return 0;
}
return maxDepth(root->left)>maxDepth(root->right)?maxDepth(root->left)+1:maxDepth(root->right)+1;
}
表面的には大きな問題はないように見えますが、実際には大きな問題があります。このように送信結果を書き込むと、コードの最後の行で実際に再度カウントされるため、制限時間を超えています。
最適化されたコードは次のとおりです
int maxDepth(struct TreeNode* root)
{
if(root==NULL)
{
return 0;
}
int leftDepth=maxDepth(root->left);
int rightDepth=maxDepth(root->right);
return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
}
ユーザーの99.71%を破る