Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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)));
        }