题目:
输入两棵二叉树A和B,判断B是不是A的子结构。
代码:
class TreeNode {
int data;
TreeNode left;
TreeNode right;
}
public class SubTree {
/**
* 第一步:在树A中找到和B的根节点的值一样的节点R
* 第二步:再判断树A中以R为根节点的子树是不是包含和树B一样的结构
*/
public boolean hasSubTree(TreeNode root1, TreeNode root2) {
boolean result = false;
if(root1 != null && root2 != null) {
if(root1.data == root2.data)
result = doesTree1HasTree2(root1, root2);
if(!result) {
result = hasSubTree(root1.left, root2);
}
if(!result) {
result = hasSubTree(root1.right, root2);
}
}
return result;
}
public boolean doesTree1HasTree2(TreeNode root1, TreeNode root2) {
if(root2 == null) return true;
else if(root1 == null) return false;
if(root1.data != root2.data) return false;
return doesTree1HasTree2(root1.left, root2.left)
&& doesTree1HasTree2(root1.right, root2.right);
}
}