public boolean isSubtree(TreeNode largeTree, TreeNode smallTree){
        if(largeTree == null || smallTree == null){
            return false;
        }
        //BFS on large tree
        Queue<TreeNode> BFSQueue = new ArrayDeque<TreeNode>();
        BFSQueue.add(largeTree);
        while(!BFSQueue.isEmpty()){
            TreeNode currentNode = BFSQueue.poll();
            if(currentNode.left !=null){
                BFSQueue.add(currentNode.left);
            }
            if(currentNode.right != null){
                BFSQueue.add(currentNode.right);
            }
            if(currentNode.value == smallTree.value){
                if(checkSubtree(currentNode, smallTree)){
                    return true;
                }
            }
        }
        return false;
    }