二叉树的深度
解决二叉树问题最重要的思想就是递归,而递归和我们高中时学的数列很像,在这个问题里,我们观察其实就可以发现,这个题目的是找最深的那颗子树,也就是说,我们要的是左右子树里面深度最大的那个值再加上1,也就是这棵树的深度了。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
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;
}
这个题要注意一个点,不能直接return maxDepth(root->left)>maxDepth(root->right)?maxDepth(root->left)+1:maxDepth(root->right)+1;如果这样的话,提交会显示超出时间限制。
平衡树
这个题在上一个题的基础上更进一步,我们可以直接用上一个题的函数。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
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;
}
bool isBalanced(struct TreeNode* root)
{
if(root==NULL)
return true;
//return maxDepth(root->left)<maxDepth(root->right)+2&&maxDepth(root->left)+2>maxDepth(root->right)&&isBalanced(root->left)&&isBalanced(root->right);
return abs(maxDepth(root->left)-maxDepth(root->right))<2&&isBalanced(root->left)&&isBalanced(root->right);
}
可以用abs()来优化代码,abs指的是求绝对值。