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()); }
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()); }
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); }
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); }
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()); }