一、226 翻转二叉树
struct TreeNode* invertTree(struct TreeNode* root) {
if(root == NULL)
return root;
//前序
//交换(中)
struct TreeNode*tmp = root ->left;
root->left = root->right;
root->right = tmp;
//左
invertTree(root->left);
//右
invertTree(root->right);
//后序
//左
invertTree(root->left);
//右
invertTree(root->right);
//交换(中)
struct TreeNode*tmp = root ->left;
root->left = root->right;
root->right = tmp;
//中序
//左
invertTree(root->left);
//交换(中)
struct TreeNode*tmp = root ->left;
root->left = root->right;
root->right = tmp;
//右(现左原右)
invertTree(root->left);
return root;
}
二、101 对称二叉树
bool Compare(struct TreeNode*left,struct TreeNode*right)
{
if(left==NULL&&right==NULL)//都为空
return true;
else if(left==NULL||right==NULL)//其中一个为空,另一个不为空
return false;
else if(left->val!=right->val)//两个都不为空但值不相等
return false;
return (Compare(left->left,right->right)&&Compare(left->right,right->left));
}
bool isSymmetric(struct TreeNode* root) {
if(root==NULL){
return true;
}
return Compare(root->left,root->right);
}
三、104 二叉树的最大深度
int maxDepth(struct TreeNode* root) {
//若传入结点为NULL,返回0
if(!root)
return 0;
//求出左子树深度
int left = maxDepth(root->left);
//求出右子树深度
int right = maxDepth(root->right);
//求出左子树深度和右子树深度的较大值
int max = left > right ? left : right;
//返回较大值+1(1为当前层数)
return max + 1;
}