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

题目描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路:
先设置一个标志位result = false,当匹配成功result就为true,否则默认返回false。
判断根节点是否相同,如果相同就递归调用方法
如果根节点不同,就判断tree1的左子树和tree2是否相同,如果不同就再判断右子树是否和tree2相同。
两棵树都不为空才继续判断,如果tree2为空说明匹配,遍历完成。
如果tree1为空,如果tree1为空&&tree2不为空说明不匹配,或者如果tree1为空,tree2为空,说明匹配。

//节点
class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;
    }
}
public static boolean HasSubtree(TreeNode root1, TreeNode root2) {
		boolean result=false;
		if(root1!=null&&root2!=null){
			if(root1.val=root2.val){
			doesTree1havetree2(root1,root2);
			}
			if(!result){
			doesTree1haveTree2(root1.left,root2);
			}
			if(!result){
			doesTree1haveTree2(root1.right,root2);
		}
			
}

public static boolean doesTree1haveTree2(TreeNode node1,TreeNode node2){
	
	if(node2==null){
	return true;
	}
	if(node1==null){
	return false;
	}
	if(node1.val!=node2.val){
	return false;
	}
	return doesTree1haveTree2(node1.left,node2.left)&&doesTree1haveTree2(node1.right,node2.right);
}
	}

你可能感兴趣的:(二叉树)