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.
算法1:递归解法,如果根节点相同,再递归的看左子树和右子树是否相同
/**
* Definition for binary tree
* 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) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
if(p && q)
{
if(p->val == q->val && isSameTree(p->left, q->left) &&
isSameTree(p->right, q->right))
return true;
else return false;
}
else if(p || q)
return false;
else return true;
}
};
算法2:通过层序遍历,分别用两个队列保存两棵树的层序节点。每次从两个队列中分别取出一个元素,如果他们的值相同,再继续遍历子节点。注意每次取出的两个元素的左子树要么同时非空,要么同时为空,右子树也一样
/**
* Definition for binary tree
* 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) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
queue<TreeNode*> pQueue, qQueue;
if(p)pQueue.push(p);
if(q)qQueue.push(q);
while(pQueue.empty() == false && qQueue.empty() == false)
{
TreeNode *pp = pQueue.front();
TreeNode *qq = qQueue.front();
pQueue.pop(); qQueue.pop();
if(pp->val == qq->val)
{
if(pp->left && qq->left)
{
pQueue.push(pp->left);
qQueue.push(qq->left);
}
else if(pp->left || qq->left)
return false;
if(pp->right && qq->right)
{
pQueue.push(pp->right);
qQueue.push(qq->right);
}
else if(pp->right || qq->right)
return false;
}
else return false;
}
if(pQueue.empty() && qQueue.empty())
return true;
else return false;
}
};