题目:输入两颗二叉树A和B,判断B是不是A的子结构。
思路:
1.在树A中找到和B根节点的值一样的节点R。
采用递归方法去遍历树
public static boolean hasSubTree(BinaryTreeNode root1,BinaryTreeNode root2) {
boolean result=false;
if(root1!=null&&root2!=null) {
if(root1.value==root2.value)
result=dosTree1HaveTree2(root1,root2);
if(!result)
result=hasSubTree(root1.left,root2);
if(!result)
result=hasSubTree(root1.right,root2);
}
return result;
}
2.判断树A中以R为根节点的子树是不是包含和B一样的结构。
如果R的值和树B根节点不一样,则以R为根节点的子树和树B肯定不具有相同的节点;
如果相同,则递归比较左右节点值是否相同。
递归终止条件是到达了树A或者树B的根节点。
public static boolean dosTree1HaveTree2(BinaryTreeNode root1,BinaryTreeNode root2) {
if(root2==null) //子树已经比较完
return true;
if(root1==null) //子树还没找到所有相同的节点,待寻找的树已经遍历完
return false;
if(root1.value!=root2.value)
return false;
return dosTree1HaveTree2(root1.left,root2.left)&&dosTree1HaveTree2(root1.right,root2.right);
}