private BoltNode assembleTree(List<Nut> nuts, List<Bolt> bolts) { // Termination condition if (nuts.Count == 0) return null; if (nuts.Count == 1) { return new BoltNode(bolts[0], nuts[0]); } Bolt pivotBolt = bolts[0]; Nut pivotNut = nuts.Where(nut => nut.Size == pivotBolt.Size).ToArray()[0]; nuts.Remove(pivotNut); bolts.Remove(pivotBolt); List<Nut> smallerNuts = nuts.Where(nut => nut.Size < pivotBolt.Size).ToList(); List<Nut> largerNuts = nuts.Where(nut => nut.Size > pivotBolt.Size).ToList(); List<Bolt> smallerBolts = bolts.Where(bolt => bolt.Size < pivotNut.Size).ToList(); List<Bolt> largerBolts = bolts.Where(bolt => bolt.Size > pivotNut.Size).ToList(); BoltNode node = new BoltNode(pivotBolt, pivotNut); node.left = assembleTree(smallerNuts, smallerBolts); node.right = assembleTree(largerNuts, largerBolts); return node; }
private void printTree(BoltNode node) { if (node != null) { printTree(node.left); Console.WriteLine(node.bolt.ToString() + " " + node.nut.ToString()); printTree(node.right); } }