此博客链接:https://www.cnblogs.com/ping2yingshi/p/13518884.html
相同的树
题目链接:https://leetcode-cn.com/problems/same-tree/
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 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
题解:
思路:遍历第一个树,然后和第二个树逐个对比,如果有不相同的,则返回flase。然后递归遍历左子树和右子树(如果存在的话),如果一个树的左子树或者右子树存在,而另外一方的左子树或者右子树不存在,则直接返回false.
代码:
class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { while(p!=null) { if(p.val!=q.val) { return false; } if(p.left!=null)` { if(q.left!=null) { isSameTree( p.left, q.left); } else return false; } if(q.right!=null) { if(p.right!=null) { isSameTree( p.right, q.right); } else return false; } } return true; } }
此代码又是超时,还没有找到原因。
修改代码:(还是超时)
class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { while(p!=null) { if(q!=null&&p.val!=q.val) { return false; } if(p.left!=null) { if(q.left!=null) { return isSameTree( p.left, q.left); } else return false; } if(q.right!=null) { if(p.right!=null) { return isSameTree( p.right, q.right); } else return false; } } return true; } }