算法--递归求树的子结构

版权声明:转载请注明来源 https://blog.csdn.net/tangyuan_sibal/article/details/88587660

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

在这里插入图片描述

右树为左树的一个子结构

思路:采用递归方法,
1、在左树中查找到跟右树根节点相等的节点
2、如果找到根节点一样的,判断左右子树是不是相等,如果是,则为true,当右树的所有节点都匹配成功时,则返回结果。

/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        boolean result = false;
        if(root1!=null&&root2!=null)
        {
            if(Equal(root1.val,root2.val))
                result = DoesTreeHaveTree2(root1,root2);
            if(!result)
                result = HasSubtree(root1.left,root2);
            if(!result)
                result = HasSubtree(root1.right,root2);
        }
        return result;
    }
    private static boolean DoesTreeHaveTree2(TreeNode root1,TreeNode root2)
    {
        if(root2==null)
            return true;
        if(root1==null)
            return false;
        if(!Equal(root1.val,root2.val))
            return false;
        return DoesTreeHaveTree2(root1.left,root2.left)
            &&DoesTreeHaveTree2(root1.right,root2.right);
    }
    private static boolean Equal(int num1,int num2)
    {
        if(num1-num2==0)
            return true;
        else
            return false;
    }
}

总结:跟树扯上关系的一定要把握好递归的思想来查找它的左右子树。

猜你喜欢

转载自blog.csdn.net/tangyuan_sibal/article/details/88587660