Given two binary trees, write a function to check if they are equal or not.
Two binary trees are considered equal if they are structurally identical and the nodes have the same value.
思路:
树的问题很多都是用递归来处理就简单的,这里也是用递归处理,设定标志位,假如任何不相等,那么就标志位设为false,只要任何情况下被设为false,那么就return false。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool mark=true;
bool isSameTree(TreeNode* p, TreeNode* q) {
if(p==NULL&&q==NULL) return true;
Same(p,q);
return mark;
}
void Same(TreeNode* p, TreeNode* q){
if(p==NULL&&q==NULL) return ;
if((p==NULL&&q!=NULL)||(q==NULL&&p!=NULL)||(p->val!=q->val))
{
mark=false;
return ;
}
Same(p->left,q->left);
Same(p->right,q->right);
//return true;
}
};
方法二:也是递归
思路:既然有任何条件不被满足都是false,那么可以利用与的特性,即有任何false,那么结果一定是false。
/************************************/
下面是我第二次写这道题,似乎更简单了,利用的就是方法二
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isSameTree(TreeNode* p, TreeNode* q) {
if((p==NULL&&q!=NULL)||(q==NULL&&p!=NULL))
return false;
return judge(p,q);
}
bool judge(TreeNode* p, TreeNode* q){
if((p==NULL&&q!=NULL)||(q==NULL&&p!=NULL)) return false;
if(p==NULL&&q==NULL) return true;
if(p->val!=q->val) return false;
return judge(p->left,q->left)&&judge(p->right,q->right);
}
};