树的子结构

1.题目:
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
2.思路:
首先主方法:
1.首先需要判断A,B的根节点是否一样。
2.如果不一样,判断A的左孩子和B的根节点是否一样,或者判断A的右孩子和B的根节点是否一样。依次找下去,直到找到相同进入次方法
如果上述情况都不满足则说明不包含
其次:次方法递归遍历当前节点的子树是否完全相同:
1.如果找到了A中有值和B中的根节点相同,则比较左右子树是否相同。
2.如果B为空了,则说明包含
3.如果A为空了或者存在不等的情况,则说明不包含

public class Solution {
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        if(root1==null||root2==null){
            return false;
        }
        //1.第一种情况,两颗子树相同
        if(root1.val==root2.val){
            if(judge(root1,root2)){
                return true;
            }
        }
        //2.第二种情况,从属关系,大树左、右子树都递归遍历直到找到与小树根节点相同的值
        return HasSubtree(root1.left,root2)||HasSubtree(root1.right,root2);
    }
    public boolean judge(TreeNode bigTree,TreeNode smallTree){
        //小树一旦循环完毕,代表全部匹配成功
        if(smallTree==null){
            return true;
        }
        //大树遍历完或者存在不相等的值,肯定不匹配
        if(bigTree==null||bigTree.val!=smallTree.val){
            return false;
        }
        //相等后,判断递归遍历判断左右孩子是否都相等
            return judge(bigTree.left,smallTree.left)&&judge(bigTree.right,smallTree.right);
    }
}
全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务