예제 #1
0
        public void TestWrap()
        {
            /*
             *          1                   1
             *         / \                 / \
             *        2   3               2   3
             *           / \                 / \
             *          4   5               4   5
             */
            var s     = "1,2,X,X,3,4,X,X,5";
            var obj   = new Codec();
            var root1 = obj.Deserialize(s);

            s = "1,2,X,X,3,4,X,X,5";
            var root2 = obj.Deserialize(s);

            Assert.True(IsSameTree(root1, root2));

            /*
             *          1                       1
             *         / \                    /   \
             *        2   3                  2     2
             *       / \   \                / \   / \
             *      4   5   6              4   5 4   5
             */

            s     = "1,2,4,X,X,5,X,X,3,X,6";
            root1 = obj.Deserialize(s);

            s     = "1,2,4,X,X,5,X,X,2,5,X,X,4";
            root2 = obj.Deserialize(s);
            Assert.False(IsSameTree(root1, root2));
        }
예제 #2
0
        public void TestWrap()
        {
            /*
             *       1
             *      / \
             *     2   3
             *        / \
             *       4   5
             */
            var s1    = "1,2,X,X,3,4,X,X,5";
            var obj   = new Codec();
            var root1 = obj.Deserialize(s1);

            var res = IsValidBST(root1);

            Assert.False(res);

            /*
             *      2
             *     / \
             *    1   3
             *       / \
             *      4   5
             */
            s1    = "2,1,X,X,3,4,X,X,5";
            obj   = new Codec();
            root1 = obj.Deserialize(s1);

            res = IsValidBST(root1);
            Assert.False(res);

            /*
             *      5
             *     / \
             *    1   4
             *       / \
             *      3   6
             */
            s1    = "5,1,X,X,4,3,X,X,6";
            obj   = new Codec();
            root1 = obj.Deserialize(s1);

            res = IsValidBST(root1);
            Assert.False(res);

            /*
             *      3
             *     / \
             *    1   5
             *       / \
             *      4   6
             */
            s1    = "3,1,X,X,5,4,X,X,6";
            obj   = new Codec();
            root1 = obj.Deserialize(s1);

            res = IsValidBST(root1);
            Assert.True(res);
        }
예제 #3
0
        public void TestWrap()
        {
            /*
             *       1                  2                        3
             *      / \                / \                      / \
             *     2   3              1   3          =>        4   5
             *        / \              \   \                  / \   \
             *       4   5              4   7                5  4    7
             */
            var s1    = "1,2,X,X,3,4,X,X,5";
            var s2    = "2,1,X,4,3,X,7";
            var obj   = new Codec();
            var root1 = obj.Deserialize(s1);
            var root2 = obj.Deserialize(s2);

            var res = MergeTrees(root1, root2);

            Assert.Equal(3, res.val);
        }
예제 #4
0
        public void TestWrap()
        {
            /*
             *          1
             *         / \
             *        2   3
             *           / \
             *          4   5
             */
            var s            = "1,2,X,X,3,4,X,X,5";
            var obj          = new Codec();
            var root         = obj.Deserialize(s);
            var listExpected = new List <List <int> >();

            listExpected.Add(new List <int> {
                1
            });
            listExpected.Add(new List <int> {
                2, 3
            });
            listExpected.Add(new List <int> {
                4, 5
            });

            Assert.Equal(listExpected, LevelOrder(root));


            /*
             *          1
             *         / \
             *        2   3
             *       / \   \
             *      4   5   6
             */

            s    = "1,2,4,X,X,5,X,X,3,X,6";
            obj  = new Codec();
            root = obj.Deserialize(s);

            listExpected = new List <List <int> >();
            listExpected.Add(new List <int> {
                1
            });
            listExpected.Add(new List <int> {
                2, 3
            });
            listExpected.Add(new List <int> {
                4, 5, 6
            });

            Assert.Equal(listExpected, LevelOrder(root));
        }
예제 #5
0
        public void TestWrap()
        {
            /*
             *       1
             *     /   \
             *    0      1
             *   / \    / \
             *  0   1  0   1
             */
            var s    = "1,0,0,X,X,1,X,X,1,0,X,X,1";
            var obj  = new Codec();
            var root = obj.Deserialize(s);

            var res = SumRootToLeaf(root);

            Assert.Equal(22, res);
        }
예제 #6
0
        public void TestWrap()
        {
            /*
             *          1
             *         / \
             *        2   3
             *           / \
             *          4   5
             */
            var s    = "1,2,X,X,3,4,X,X,5";
            var obj  = new Codec();
            var root = obj.Deserialize(s);

            Assert.False(IsSymmetric(root));


            /*
             *          1
             *         / \
             *        2   3
             *       / \   \
             *      4   5   6
             */

            s    = "1,2,4,X,X,5,X,X,3,X,6";
            obj  = new Codec();
            root = obj.Deserialize(s);

            Assert.False(IsSymmetric(root));

            /*
             *          1
             *        /   \
             *       2     2
             *      / \   / \
             *     4   5 5   4
             */

            s    = "1,2,4,X,X,5,X,X,2,5,X,X,4";
            obj  = new Codec();
            root = obj.Deserialize(s);

            Assert.True(IsSymmetric(root));
        }
예제 #7
0
        public void TestWrap()
        {
            /*
             *          1
             *         / \
             *        2   3
             *           / \
             *          4   5
             */
            var s       = "1,2,X,X,3,4,X,X,5";
            var obj     = new Codec();
            var root    = obj.Deserialize(s);
            var compare = new List <int> {
                1, 2, 3, 4, 5
            };
            var res = PreorderTraversal(root);

            Assert.Equal(compare, res);


            /*
             *          1
             *         / \
             *        2   3
             *       / \   \
             *      4   5   6
             */

            s       = "1,2,4,X,X,5,X,X,3,X,6";
            obj     = new Codec();
            root    = obj.Deserialize(s);
            compare = new List <int> {
                1, 2, 4, 5, 3, 6
            };
            res = PreorderTraversal(root);
            Assert.Equal(compare, res);
        }
예제 #8
0
        public void TestWrap()
        {
            /*
             *          1
             *         / \
             *        2   3
             *           / \
             *          4   5
             */
            var s    = "1,2,X,X,3,4,X,X,5";
            var obj  = new Codec();
            var root = obj.Deserialize(s);

            var res = WidthOfBinaryTree(root);

            Assert.Equal(2, res);


            /*
             *         1
             *        / \
             *       2   3
             *      / \   \
             *     4   5   6
             */

            s    = "1,2,4,X,X,5,X,X,3,X,6";
            obj  = new Codec();
            root = obj.Deserialize(s);

            res = WidthOfBinaryTree(root);
            Assert.Equal(4, res);

            /*
             *          1
             *         / \
             *        3   2
             *       /
             *      5
             */

            s    = "1,3,5,X,X,X,2";
            obj  = new Codec();
            root = obj.Deserialize(s);

            res = WidthOfBinaryTree(root);
            Assert.Equal(2, res);

            /*
             *          1
             *         /
             *        3
             *       /
             *      5
             */

            s    = "1,3,5,X,X,X";
            obj  = new Codec();
            root = obj.Deserialize(s);

            res = WidthOfBinaryTree(root);
            Assert.Equal(1, res);

            /*
             *          1
             *         / \
             *        3   2
             *       /     \
             *      5       6
             *     /         \
             *    7           8
             */

            s    = "1,3,5,7,X,X,X,X,2,X,6,X,8";
            obj  = new Codec();
            root = obj.Deserialize(s);

            res = WidthOfBinaryTree(root);
            Assert.Equal(8, res);
        }
예제 #9
0
        public void TestWrap()
        {
            /*
             *  Orignal
             *          1
             *         / \
             *        2   3
             *           / \
             *          4   5
             */
            var s    = "1,2,X,X,3,4,X,X,5";
            var obj  = new Codec();
            var root = obj.Deserialize(s);

            /*
             *  Inverted
             *          1
             *         / \
             *        3   2
             *       / \
             *      5   4
             */

            s = "1,3,5,X,X,4,X,X,2";
            var expected = obj.Deserialize(s);
            var res      = InvertTree(root);
            var treeTest = new SameTree();

            Assert.True(treeTest.IsSameTree(expected, res));

            /*
             * Original
             *         1
             *        / \
             *       2   3
             *      / \   \
             *     4   5   6
             */

            s    = "1,2,4,X,X,5,X,X,3,X,6";
            root = obj.Deserialize(s);

            /*
             *  Inverted
             *          1
             *         / \
             *        3   2
             *       /   / \
             *      6   5   4
             *
             */

            s        = "1,3,6,X,X,X,2,5,X,X,4";
            expected = obj.Deserialize(s);
            res      = InvertTree(root);
            Assert.True(treeTest.IsSameTree(expected, res));

            /*
             *  Original
             *          1
             *         / \
             *        3   2
             *       /
             *      5
             */

            s    = "1,3,5,X,X,X,2";
            root = obj.Deserialize(s);

            /*
             *  Inverted
             *          1
             *         / \
             *        2   3
             \
             \              5
             */

            s        = "1,2,X,X,3,X,5";
            expected = obj.Deserialize(s);
            res      = InvertTree(root);
            Assert.True(treeTest.IsSameTree(expected, res));

            /*
             *  Original
             *          1
             *         /
             *        3
             *       /
             *      5
             */

            s    = "1,3,5,X,X,X";
            root = obj.Deserialize(s);

            /*
             *  Inverted
             *         1
             \
             \           3
             \
             \             5
             */

            s        = "1,X,3,X,5";
            expected = obj.Deserialize(s);
            res      = InvertTree(root);
            Assert.True(treeTest.IsSameTree(expected, res));

            /*
             *  Original
             *          1
             *         / \
             *        3   2
             *       /     \
             *      5       6
             *     /         \
             *    7           8
             */

            s    = "1,3,5,7,X,X,X,X,2,X,6,X,8";
            root = obj.Deserialize(s);

            /*
             *  Inverted
             *          1
             *         / \
             *        2   3
             *       /     \
             *      6       5
             *     /         \
             *    8           7
             */


            s        = "1,2,6,8,X,X,X,X,3,X,5,X,7";
            expected = obj.Deserialize(s);
            res      = InvertTree(root);
            Assert.True(treeTest.IsSameTree(expected, res));
        }
예제 #10
0
        public void TestWrap()
        {
            /*
             *          1                     3
             *         / \                   / \
             *        2   3                 4   5
             *           / \
             *          4   5
             */
            var s1    = "1,2,X,X,3,4,X,X,5";
            var s2    = "3,4,X,X,5";
            var obj   = new Codec();
            var root1 = obj.Deserialize(s1);
            var root2 = obj.Deserialize(s2);

            Assert.True(IsSubtree(root1, root2));

            /*
             *         1                     2
             *        / \                   / \
             *       2   3                 4   5
             *      / \   \
             *     4   5   6
             */

            s1    = "1,2,4,X,X,5,X,X,3,X,6";
            s2    = "2,4,X,X,5";
            root1 = obj.Deserialize(s1);
            root2 = obj.Deserialize(s2);
            Assert.True(IsSubtree(root1, root2));

            /*
             *          1                   3
             *         / \                 /
             *        3   2               5
             *       /
             *      5
             */

            s1    = "1,3,5,X,X,X,2";
            s2    = "3,5";
            root1 = obj.Deserialize(s1);
            root2 = obj.Deserialize(s2);
            Assert.True(IsSubtree(root1, root2));

            /*
             *          1                   3
             *         /                   /
             *        3                   5
             *       /
             *      5
             */

            s1    = "1,3,5,X,X,X";
            s2    = "3,5";
            root1 = obj.Deserialize(s1);
            root2 = obj.Deserialize(s2);
            Assert.True(IsSubtree(root1, root2));

            /*
             *          1                      6
             *         / \                      \
             *        3   2                      8
             *       /     \
             *      5       6
             *     /         \
             *    7           8
             */

            s1    = "1,3,5,7,X,X,X,X,2,X,6,X,8";
            s2    = "6,X,X,8";
            root1 = obj.Deserialize(s1);
            root2 = obj.Deserialize(s2);
            Assert.True(IsSubtree(root1, root2));
        }