Exemple #1
0
        public void BinarySearchTreeTest1()
        {
            var nodes = new List <BNode>
            {
                new BNode(30),
                new BNode(20),
                new BNode(40),
                new BNode(70),
                new BNode(60),
                new BNode(80)
            };

            var root = new BNode(50);

            var bst = new BinarySearchTree(root);

            foreach (var node in nodes)
            {
                bst.Insert(node.Data);
            }

            var sb = new StringBuilder("|");

            bst.InOrderTraverse(n => sb.Append($"{n.Data}|"));
            Assert.Equal("|20|30|40|50|60|70|80|", sb.ToString());
        }
Exemple #2
0
        public void BinarySearchTreeTest2()
        {
            var nodes = new List <BNode>
            {
                new BNode(0),
                new BNode(1),
                new BNode(2),
                new BNode(3),
                new BNode(4),
                new BNode(5),
                new BNode(6),
                new BNode(8),
                new BNode(9)
            };

            var root = new BNode(7);

            var bst = new BinarySearchTree(root);

            foreach (var node in nodes)
            {
                bst.Insert(node.Data);
            }

            var sb = new StringBuilder();

            bst.InOrderTraverse(n => sb.Append(n.Data));
            Assert.Equal("0123456789", sb.ToString());
        }
Exemple #3
0
        public static List <string> PrintSumPaths(BNode n, int target)
        {
            var paths = new List <string>();
            var sums  = new List <int>();

            SearchSum(n, target, paths, sums, 0);
            return(paths);
        }
Exemple #4
0
        private static void SearchSum(BNode n, int target, List <string> paths, List <int> sums, int level)
        {
            if (n == null)
            {
                return;
            }
            sums.Add(n.Data);
            var sum = target;

            for (var i = level; i >= 0; i--)
            {
                sum -= sums[i];
                if (sum == 0)
                {
                    paths.Add(GetPath(sums, i, level));
                }
            }
            var c1 = Clone(sums);
            var c2 = Clone(sums);

            SearchSum(n.Left, target, paths, c1, level + 1);
            SearchSum(n.Right, target, paths, c2, level + 1);
        }
Exemple #5
0
        public void BinaryTreeTraversalsWithStack()
        {
            var n0 = new BNode(0);
            var n1 = new BNode(1);
            var n2 = new BNode(2);
            var n3 = new BNode(3);
            var n4 = new BNode(4);
            var n5 = new BNode(5);
            var n6 = new BNode(6);
            var n7 = new BNode(7);
            var n8 = new BNode(8);
            var n9 = new BNode(9);

            n3.Left  = n1;
            n3.Right = n2;
            n8.Left  = n3;
            n8.Right = n4;
            n7.Left  = n8;
            n7.Right = n6;
            n6.Left  = n9;
            n6.Right = n0;
            n9.Left  = n5;

            var tree = new BinaryTree(n7);

            var sb = new StringBuilder();

            //tree.InOrderTraverseWithStack(s => sb.Append(s.Data));
            //Assert.Equal("1328475960", sb.ToString());
            //sb.Clear();
            //tree.PreOrderTraverseWithStack(s => sb.Append(s.Data));
            //Assert.Equal("7831246950", sb.ToString());
            //sb.Clear();
            tree.PostOrderTraverseWithStack(s => sb.Append(s.Data));
            Assert.Equal("1234859067", sb.ToString());
        }