剑指offer18,树的子结构(Java实现)

package swordOffer;

/**
 * 树的子结构
 * 描述:输入两科二叉树A和B,判断B是不是A的子结构
 * @author lenovo047
 *
 */
public class test18 {
    
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        boolean flag = false;
        //寻找相同的根结点
        if(root1 != null && root2 != null){
            if(root1.val == root2.val){       //只有根结点相同了,才能向下去找
                flag = doesAhasB(root1, root2);
            }
            if(!flag){                        //向左去寻找和根结点相同的点
                flag = HasSubtree(root1.left, root2);
            }
            if(!flag){                       //向右去寻找和根结点相同的点
                flag = HasSubtree(root1.right, root2);
            }
        }
        return flag;
    }

    private boolean doesAhasB(TreeNode root1, TreeNode root2) {
        if(root2 == null) return true; //说明root2已经遍历完成
        if(root1 == null) return false;  //说明root2还是遍历完,root1先没了
        if(root1.val != root1.val){   //值不相同,return false
            return false;
        }
        
        return doesAhasB(root1.left, root2.left) && doesAhasB(root1.right, root2.right);
    }

}
 

你可能感兴趣的:(剑指offer)