目录
一、226.翻转二叉树
1.1 题目
1.2 解题思路
思路:利用分而治之的思想,将树分成一个一个的小树,然后交换其左右子树即可
1.3 代码
void Swap(struct TreeNode** p1,struct TreeNode** p2)
{
struct TreeNode** a=*p1;
*p1=*p2;
*p2=a;
}
struct TreeNode* invertTree(struct TreeNode* root){
if(root==NULL)
{
return root;
}
Swap(&root->left,&root->right);
invertTree(root->left);
invertTree(root->right);
return root;
}//翻转二叉树
二、100.相同的树
2.1 题目
2.2 解题思路
2.3 代码
bool isSameTree(struct TreeNode* p, struct TreeNode* q){
if(p==NULL&&q==NULL)
{
return true;
}
if((p==NULL||q==NULL)||p->val!=q->val)
{
return false;
}
return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}
三、101.对称二叉树
3.1 题目
3.2 解题思路
3.3 代码
bool isSameTree(struct TreeNode* p, struct TreeNode* q){
if(p==NULL&&q==NULL)
{
return true;
}
if((p==NULL||q==NULL)||p->val!=q->val)
{
return false;
}
return isSameTree(p->left,q->right)&&isSameTree(p->right,q->left);
}
bool isSymmetric(struct TreeNode* root){
if(root==NULL)
{
return true;
}
return isSameTree(root->left,root->right);
}//对称二叉树
四、572.另一个树的子树
4.1 题目
4.2 解题思路
4.3 代码
bool isSameTree(struct TreeNode* p, struct TreeNode* q){
if(p==NULL&&q==NULL)
{
return true;
}
if((p==NULL||q==NULL)||p->val!=q->val)
{
return false;
}
return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot){
if(root==NULL)
{
return false;
}
if(isSameTree(root,subRoot))
{
return true;
}
return isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);
}//另一颗树的子树
五、 110.平衡二叉树
5.1 题目
5.2 解题思路
5.3 代码
int treeheight(struct TreeNode* root)
{
if(root==NULL)
{
return 0;
}
int ret1=treeheight(root->left);
int ret2=treeheight(root->right);
return ret1>ret2?ret1+1:ret2+1;
}
bool isBalanced(struct TreeNode* root){
if(root==NULL)
{
return true;
}
return (abs(treeheight(root->left)-treeheight(root->right))<=1
&&isBalanced(root->left)
&&isBalanced(root->right));
}