Iava 剑指offer_面试题18_树的子结构
2017-05-04 08:36
316 查看
题目:输入两棵二叉树 A 和 B,判断 B 是不是 A 的子结构。
两个步骤:
1、第一步在树 A 中找到和树 B 的根结点的值一样的结点 R
2、第二步再判断树 A 中以 R 为根结点的子树是不是包含和树 B 一样的结构。
对于递归:想好判断条件,以及 什么条件下该去递归。
[java] view
plain copy
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
if(root1 == null || root2 == null) return false;
return isEqual(root1, root2) || HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2);
}
private boolean isEqual(TreeNode root1, TreeNode root2) {
if(root2 == null) return true;
if(root1 == null) return false;
return root1.val == root2.val && isEqual(root1.left, root2.left) && isEqual(root1.right, root2.right);
}
}
两个步骤:
1、第一步在树 A 中找到和树 B 的根结点的值一样的结点 R
2、第二步再判断树 A 中以 R 为根结点的子树是不是包含和树 B 一样的结构。
对于递归:想好判断条件,以及 什么条件下该去递归。
[java] view
plain copy
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
if(root1 == null || root2 == null) return false;
return isEqual(root1, root2) || HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2);
}
private boolean isEqual(TreeNode root1, TreeNode root2) {
if(root2 == null) return true;
if(root1 == null) return false;
return root1.val == root2.val && isEqual(root1.left, root2.left) && isEqual(root1.right, root2.right);
}
}
相关文章推荐
- 剑指offer面试题18-树的子结构
- 【剑指offer】面试题18:输入两颗二叉树A和B,判断B是不是A的子结构?
- 剑指offer之面试题18:树的子结构
- 剑指offer-面试题18-树的子结构
- 剑指offer-面试题 18:树的子结构
- 剑指offer 面试题18 判断二叉树B是否是A的子结构
- 剑指offer_面试题18_树的子结构
- 剑指offer-面试题18:树的子结构
- 剑指offer-面试题18-树的子结构
- 【剑指offer】3.4代码的鲁棒性——面试题18:树的子结构
- 剑指Offer_面试题18_树的子结构
- 剑指offer之面试题18:树的子结构
- [剑指offer][面试题18]树的子结构
- 【剑指Offer学习】【面试题18 :树的子结构】
- 剑指offer 面试题18—树的子结构
- 剑指Offer--面试题18:数的子结构--Java实现
- 剑指offer-面试题18:树的子结构
- 剑指offer面试题18-:树的子结构
- [剑指offer]面试题18:树的子结构
- 【剑指offer】面试题18:树的子结构