public void Test(String input) { // ARRANGE var valuesIn = JsonConvert.DeserializeObject <Int32?[]>(input); // ACT Node root = Node.Make(valuesIn); IEnumerable <Int32?> valuesOut = Node.Make(root); // ASSERT String output = JsonConvert.SerializeObject(valuesOut); Assert.That(output, Is.EqualTo(input)); }
public static Node Make([NotNull] IEnumerable <Int32?> values) { if (values == null) { throw new ArgumentNullException(nameof(values)); } IEnumerable <Node> nodes = values.Select(value => value != null ? new Node(value.Value) : null).ToArray(); var queue = new Queue <Node>(nodes); if (queue.Count <= 0) { return(null); } Node root = queue.Dequeue(); if (queue.Count <= 0) { return(root); } foreach (Node node in nodes) { if (node == null) { continue; } node.left = queue.Dequeue(); if (queue.Count <= 0) { return(root); } node.right = queue.Dequeue(); if (queue.Count <= 0) { return(root); } } return(root); }
public static IEnumerable <Int32?> Make(Node root) { var result = new List <Int32?>(); var queue = new Queue <Node>(); queue.Enqueue(root); while (queue.Count != 0) { Node node = queue.Dequeue(); result.Add(node?.val); if (node == null) { continue; } queue.Enqueue(node.left); queue.Enqueue(node.right); } return(result.Take(1 + result.FindLastIndex(value => value != null))); }