2020年8月7日 相同的树 isSameTree
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
}
}
解题思路:
非常明确地可以感觉到使用递归来解决,原理是这样,递归是一个把一个大的问题化简为父问题和子问题,然后解决所有子问题之后父问题就会解决的这么一个思路。
在本题中,我们要判断一个节点是否和另一个节点相同,那么我们就需要比较他本身的值和他两个子节点是否相同,那么我们的问题就转移到了两个子节点上。如果子节点都相同同时节点本身值相等,那么这个节点就和另一个节点相等。那么我们如果判断子节点是否相同,道理和父节点是一样的,我们使用同样的算法对付子节点。
public boolean isSameTree(TreeNode p, TreeNode q) {
if (p==null&&q==null)
return true;
else if (p==null||q==null)
return false;
if (p.val!=q.val)
return false;
else {
return isSameTree(p.left,q.left )&&isSameTree(p.right,q.right );
}
}