JZ26 树的子结构

描述

输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构)
假如给定A为{8,8,7,9,2,#,#,#,#,4,7},B为{8,9,2},2个树的结构如下,可以看出B是A的子结构
 
数据范围:
0 <= A的节点个数 <= 10000
0 <= B的节点个数 <= 10000
 
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}
*/
public class Solution {
    private boolean recursion(TreeNode root1, TreeNode root2){
        //当一个节点存在另一个不存在时
        if(root1 == null && root2 != null) 
            return false;
        //两个都为空则返回
        if((root1 == null && root2 == null) || (root1 != null && root2 == null)) 
            return true;
        //比较节点值
        if(root1.val != root2.val)
            return false;
        //递归比较子树
        return recursion(root1.left, root2.left) && recursion(root1.right, root2.right);
    }
 
    public boolean HasSubtree(TreeNode root1, TreeNode root2) {
        //空树
        if(root2 == null)
            return false;
        //一个为空,另一个不为空
        if(root1 == null && root2 != null)
            return false;

        //递归比较
        boolean flag1 = recursion(root1, root2); 
        //递归树1的每个节点
        boolean flag2 = HasSubtree(root1.left, root2); 
        boolean flag3 = HasSubtree(root1.right, root2);
        return flag1 || flag2 || flag3;
    }
}

 

posted on 2022-06-15 15:47  MaXianZhe  阅读(11)  评论(0编辑  收藏  举报

导航