算法学习-二叉树寻找子树

以下是代码:


public class Solution {

    //搜索头结点相同的方法

    public boolean HasSubtree(TreeNode root1,TreeNode root2) {

        boolean result=false;

//如果两个结点有一个已经遍历完了,那么返回false

        if(root2!=null&&root1!=null){

//如果root1的值和root2的值相同,则result为判断其全等的结果

            if(root1.val==root2.val)

            {result=AllEqual(root1,root2);}

//如果这时result依旧不成立的话,那么说明没找到,继续在左孩子中找

            if(!result)

            {result=HasSubtree(root1.left,root2);}

//还没找到就在右孩子中找

            if(!result)

            {result=HasSubtree(root1.right,root2);}

        }

        return result;

    }

//当头结点相同时,验证是否全结点相同

    public static boolean AllEqual(TreeNode root1,TreeNode root2){

        if(root2==null)//表示遍历完树2了

        {

            return true;

        }

        if(root1==null){//代表树一已经遍历完了但是树二还没有遍历完

            return false;

        }

//这一步特别说明一下:这里是简化写法,不易理解。

//事实上一共有三种情况:1)root1==null,root2==null 都遍历完了,说明相等 //2)root1!=null,root2=null 一没遍历完,二却没了,说明相等  3) root1==null,root2!=null

//一遍历完了,二却没有,说明不等

        if(root1.val!=root2.val)

        {

            return false;

        }

        return AllEqual(root1.left,root2.left)&&AllEqual(root1.right,root2.right);

    }

}

你可能感兴趣的:(算法学习-二叉树寻找子树)