给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
先比较根,根相等,再比较左子树,左子树相等,再去比较右子树,如此一直比较下去,直到所有节点比较完。时间复杂度是O(N)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool isSameTree(struct TreeNode* p, struct TreeNode* q){
if(p == NULL && q == NULL)
{
//两棵树都为空
return true;
}
if(p == NULL || q == NULL)
{
//其中一个树为空
return false;
}
//两棵都不为空
if(p->val != q->val)
{
//两棵树的根的值不相等
return false;
}
//都不为空,且根的值相等,比较左子树是否相等,右子树是否相等,左子树如果不相等,直接返回,不再比较右子树
return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}