1.相同的树
判断两个树是否相同,这种类型题目要用到解决二叉树最经典的递归思想,将大问题变成小问题,比如可以从好判断的方向入手,一个是空指针,另一个也是,这肯定是相同的,一个空指针,一个不是,这两个指针肯定不相同,这边可以用else if来减少代码量。两个指针指向的数据不同,这两个指针肯定不同,然后别的情况可以判断左子树是否相同,右子树是否相同来判断,递归一步步解决这个问题。
bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{
if(!p&&!q)
return true;
else if(!p||!q)
return false;
if(p->val!=q->val)
return false;
return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}
2.进阶问题-对称二叉树
bool check(struct TreeNode* p,struct TreeNode* q)
{
if(!p&&!q)
return true;
else if(!p||!q)
return false;
if(p->val!=q->val)
return false;
return check(p->left,q->right)&&check(p->right,q->left);
}
bool isSymmetric(struct TreeNode* root)
{
if(!root)
return true;
struct TreeNode* p=root->left;
struct TreeNode* q=root->right;
return check(p,q);
}
这个题如果没有第一个题的基础,真的不是很好想出来,但是,在第一题的帮助下,我们一眼就能看出来将root->left和root->right看作上一题的p,q,比较p->left和p->right和反过来的情况,这个题就很简单了。