var sol = new Solution(); var cases = new (int?[] input, int?[] expected)[] { (new int?[] { 1, 2, 5, 3, 4, null, 6 }, new int?[] { 1, null, 2, null, 3, null, 4, null, 5, null, 6 }), // (Array.Empty(), Array.Empty()), // (new int?[] { 0 }, new int?[] { 0 }) }; foreach (var (input, expected) in cases) { var root = BuildTreeFromLevelOrder(input); if (root != null) sol.Flatten(root); var actual = FlattenToOutputList(root); Console.WriteLine($"[{string.Join(", ", input.Select(FormatNullable))}] -> [{string.Join(", ", actual.Select(FormatNullable))}] (expected: [{string.Join(", ", expected.Select(FormatNullable))}])"); } static TreeNode? BuildTreeFromLevelOrder(int?[] data) { if (data.Length == 0 || data[0] == null) return null; var root = new TreeNode(data[0]!.Value); var queue = new Queue(); queue.Enqueue(root); var i = 1; while (queue.Count > 0 && i < data.Length) { var node = queue.Dequeue(); if (i < data.Length && data[i] != null) { node.left = new TreeNode(data[i]!.Value); queue.Enqueue(node.left); } i++; if (i < data.Length && data[i] != null) { node.right = new TreeNode(data[i]!.Value); queue.Enqueue(node.right); } i++; } return root; } static List FlattenToOutputList(TreeNode? root) { var result = new List(); var node = root; while (node != null) { result.Add(node.val); if (node.right != null) result.Add(null); node = node.right; } return result; } static string FormatNullable(int? value) => value?.ToString() ?? "null";