您的位置:首页 > Web前端

树的子结构 (剑指Offer 第 16 题)

2017-11-17 10:45 309 查看
题目描述:

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

解题思路:

从A树根开始往下遍历,遍历到的每一个节点,都看做是一个新的根,然后与B比较是否相同。以上主要分为2块:

A树的遍历 + A子树与B树比较是否相同。对于第一块可以采用递归来遍历,对于第二块也采用递归来逐个对应遍历比较

Java代码实现:

public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
if (root1==null && root2!=null)
return false;//递归出口1
if (root2==null)
return false;//递归出口2
boolean flag = false;
if (root1.val==root2.val){
flag = isSubtree(root1, root2);
}
if (!flag){
flag = HasSubtree(root1.left, root2)||HasSubtree(root1.right, root2);//A树的递归遍历
}
return flag;
}

public boolean isSubtree(TreeNode root1, TreeNode root2){
if (root1==null&&root2!=null)
return false;//递归出口1
if (root2==null)
return true;//递归出口2
if (root1.val==root2.val)//采用递归来逐个对应遍历比较
return isSubtree(root1.left, root2.left)&&isSubtree(root1.right, root2.right);
else
return false;
}

}


END
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: