给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1:
输入: 1 1
/ \ / \
2 3 2 3[1,2,3], [1,2,3]
输出: true
示例 2:
输入: 1 1
/ \
2 2[1,2], [1,null,2]
输出: false
示例 3:
输入: 1 1
/ \ / \
2 1 1 2[1,2,1], [1,1,2]
输出: false
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/same-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
比较两个数是否相同,先比较结点p和q是不是存在,如果存在的话他们的值是否相同,然后递归的对剩下的结点进行比较(大部分关于树的算法都可以用递归实现)。
递归的终止条件:比较完所有结点都相等,此时已不存在新的结点,则返回true。比较过程中发现不相同,则返回false
递归每一层做了什么:比较该节点的左右孩子是否同另一个树相同
代码:
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p==null&&q==null)return true; //递归的终止条件
if(p!=null&&q!=null&&p.val==q.val){ //结点都存在且他们的值相同,那么递归的比较该结点的左孩子和右孩子结点
return isSameTree(p.right,q.right)&&isSameTree(p.left,q.left);
}
return false;
}
}