思路:从根节点开始,递归地对树进行翻转,如果被遍历的节点的左右节点都已经被翻转,那么我们只要翻转左右子树的位置,就可以完成以root为根节点的树的翻转。
只要没有找到左右节点都为空的节点,就继续深入函数内部探测。将左右进行翻转。
struct TreeNode* invertTree(struct TreeNode* root) {
if(root==NULL)
return NULL;
struct TreeNode *left=invertTree(root->left);
struct TreeNode *right=invertTree(root->right);
root->left=right;
root->right=left;
return root;
}
自顶向下递归:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int height(struct TreeNode* root)
{
if(root==NULL)
{
return 0;
}
else
return fmax(height(root->left),height(root->left))+1;
}
bool isBalanced(struct TreeNode* root) {
if(root==NULL)
return true;
else
return fabs(height(root->left)-height(root->right))<=1&&isBalanced(root->left)&&isBalanced(root->right);
}