private static bool Equals(TreeNodeLc572 x, TreeNodeLc572 y)
        {
            if (x == null && y == null)
            {
                return(true);
            }

            if (x == null || y == null)
            {
                return(false);
            }


            return(x.Value == y.Value && Equals(x.Left, y.Left) && Equals(x.Right, y.Right));
        }
 private static bool Traverse(TreeNodeLc572 s, TreeNodeLc572 t)
 {
     return(s != null && (Equals(s, t) || Equals(s.Left, t) || Equals(s.Right, t)));
 }
        //Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and node values with a subtree of s.A subtree of s is a tree consists of a node in s and all of this node's descendants. The tree s could also be considered as a subtree of itself.

        //    Example 1:
        //Given tree s:

        //3
        /// \
        //4   5
        /// \
        //1   2

        //Given tree t:

        //4
        /// \
        //1   2

        //Return true, because t has the same structure and node values with a subtree of s.



        //    Example 2:
        //Given tree s:

        //3
        /// \
        //4   5
        /// \
        //1   2
        ///
        //0

        //Given tree t:

        //4
        /// \
        //1   2

        //Return false.

        public static bool IsSubTree(TreeNodeLc572 s, TreeNodeLc572 t)
        {
            return(Traverse(s, t));
        }
 public TreeNodeLc572(int val, TreeNodeLc572 left = null, TreeNodeLc572 right = null)
 {
     Value = val;
     Left  = left;
     Right = right;
 }