public class DoesTree1HaveTree2 {
/*
* 判断二叉树B是不是二叉树A的子树
*/
public boolean doesTree1HaveTree2(BinaryTreeNode root1,BinaryTreeNode root2)
{
if(root2==null)//遍历到子树的叶子结点则证明是子树
return true;
else
if(root1==null)
return false;
if(root1.data!=root2.data)
return false;
else {//当左右结点都相等时才证明有子树
return doesTree1HaveTree2(root1.leftNode, root2.leftNode) && doesTree1HaveTree2(root1.rightNode, root2.rightNode);
}
}
public boolean hasSubTree(BinaryTreeNode root1,BinaryTreeNode root2)
{
if(root2==null)
return true;
else
if(root1==null)
return false;
boolean result=false;//初始化没有找到两个树的根节点不相等
if(root1!=null && root2!=null)
{
if(root1.data==root2.data)//当找到根节点相等时,再判断是否有子树
result=doesTree1HaveTree2(root1, root2);
if(!result)//如果两个根节点不相等,递归调用hassubtree(),直到找到根节点相等
return hasSubTree(root1.leftNode, root2) || hasSubTree(root1.rightNode, root2);
}
return result;
}
}
class BinaryTreeNode
{
int data;
BinaryTreeNode leftNode;
BinaryTreeNode rightNode;
}
/*
* 判断二叉树B是不是二叉树A的子树
*/
public boolean doesTree1HaveTree2(BinaryTreeNode root1,BinaryTreeNode root2)
{
if(root2==null)//遍历到子树的叶子结点则证明是子树
return true;
else
if(root1==null)
return false;
if(root1.data!=root2.data)
return false;
else {//当左右结点都相等时才证明有子树
return doesTree1HaveTree2(root1.leftNode, root2.leftNode) && doesTree1HaveTree2(root1.rightNode, root2.rightNode);
}
}
public boolean hasSubTree(BinaryTreeNode root1,BinaryTreeNode root2)
{
if(root2==null)
return true;
else
if(root1==null)
return false;
boolean result=false;//初始化没有找到两个树的根节点不相等
if(root1!=null && root2!=null)
{
if(root1.data==root2.data)//当找到根节点相等时,再判断是否有子树
result=doesTree1HaveTree2(root1, root2);
if(!result)//如果两个根节点不相等,递归调用hassubtree(),直到找到根节点相等
return hasSubTree(root1.leftNode, root2) || hasSubTree(root1.rightNode, root2);
}
return result;
}
}
class BinaryTreeNode
{
int data;
BinaryTreeNode leftNode;
BinaryTreeNode rightNode;
}