题目:
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
思路:
递归太香了,就算它没有记忆性,重复处理相同的子问题,并且可能会造成堆栈的溢出,但是身为菜鸡我真的太爱了。
基本情况:
1.两个引用都指向空,那么结果是相等的;
2.两个引用一空一不空,那么是不会相等的;
3.两个引用都不为空:
但是所指的结点的 val
不同,那么这两棵树也是不会相同的;
如果所指的结点的 val
相同,那么我们继续看对比两棵树的左右子树。
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.left, q.left) && isSameTree(p.right, q.right);
//第二种情况就是 其他状况。
return false;
}