Given two binary trees, write a function to check if they are the same or not.
给定两个二叉树,写一个函数检查它们是否相同。
Two binary trees are considered the same if they are structurally identical and the nodes have the same value.
若两个二叉树的结构相同且节点有相同值,则它们相同。
·Example 1:
Input: 1 1
/ \ / \
2 3 2 3
[1,2,3], [1,2,3]
Output: true
·Example 2:
Input: 1 1
/ \
2 2
[1,2], [1,null,2]
Output: false
·Example 3:
Input: 1 1
/ \ / \
2 1 1 2
[1,2,1], [1,1,2]
Output: false
思路
只需要一个前序遍历(深度优先),每次判断分三种情况:
(1)if (p != NULL && q != NULL) 两个根节点都不为空,则判断值是否相等,若值相等,则判断其左右子树是否都相等;
(2)else if (p != NULL || q != NULL) 两个根节点只有一个不为空,则肯定不相等,return false;
(3)else 两个根节点都为空,则相等。
判断子树是否相等可以用递归的方法进行。
代码
class Solution {
public:
bool isSameTree(TreeNode* p, TreeNode* q) {
if(p != NULL && q != NULL){
if(p->val != q -> val) return false;
return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}
else if(p != NULL || q != NULL) return false;
return true;
}
};