using System.Collections.Generic;
public TreeNode(int val=0, TreeNode left=null, TreeNode right=null) {
public static class Program
public bool IsSubtree(TreeNode root, TreeNode subRoot) {
Queue<TreeNode> queue = [];
var node = queue.Dequeue();
if(node.val == subRoot.val && IsSameTree(node, subRoot)) return true;
if(node.left is not null) queue.Enqueue(node.left);
if(node.right is not null) queue.Enqueue(node.right);
public bool IsSameTree(TreeNode p, TreeNode q) {
if(p is null && q is null) return true;
if(p is not null && q is null) return false;
if(p is null && q is not null) return false;
if(p.val != q.val) return false;
return p.val == q.val && IsSameTree(p.left, q.left) && IsSameTree(p.right, q.right);