diff --git a/leetcode/csharp/src/ZigzagLevelOrder.cs b/leetcode/csharp/src/ZigzagLevelOrder.cs new file mode 100644 index 00000000..a2b8cd74 --- /dev/null +++ b/leetcode/csharp/src/ZigzagLevelOrder.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; +using System.Linq; + +namespace ZigzagLevelOrder +{ + + public class TreeNode + { + public int val; + public TreeNode left; + public TreeNode right; + public TreeNode(int val = 0, TreeNode left = null, TreeNode right = null) + { + this.val = val; + this.left = left; + this.right = right; + } + } + + public class Solution + { + public IList> ZigzagLevelOrder(TreeNode root) + { + if (root == null) + { + return new List>(); + } + IList> list = new List>(); + var q = new List {root}; + bool fromLeft = true; + var nextQ = new List(); + while (q.Count() > 0) + { + foreach (var node in q) + { + nextQ.Add(node.left); + nextQ.Add(node.right); + } + if (!fromLeft) + { + q.Reverse(); + } + list.Add(new List(q.Select(node => node.val))); + fromLeft = !fromLeft; + q = nextQ; + nextQ = new List(); + q.RemoveAll(node => node == null); + } + return list; + } + } + +} diff --git a/leetcode/csharp/test/ZigzagLevelOrderTest.cs b/leetcode/csharp/test/ZigzagLevelOrderTest.cs new file mode 100644 index 00000000..ef360d5a --- /dev/null +++ b/leetcode/csharp/test/ZigzagLevelOrderTest.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; +using NUnit.Framework; + +namespace ZigzagLevelOrder +{ + public class Tests + { + [SetUp] + public void Setup() + { + } + + [Test] + public void Test1() + { + var solver = new Solution(); + var root = new TreeNode { val = 3, left = new TreeNode { val = 9 }, right = new TreeNode { val = 20, left = new TreeNode { val = 15 }, right = new TreeNode { val = 7 } } }; + Assert.AreEqual(solver.ZigzagLevelOrder(root), new List> { new List { 3 }, new List { 20, 9 }, new List { 15, 7 } }); + } + + [Test] + public void Test2() + { + var solver = new Solution(); + TreeNode root = null; + Assert.AreEqual(solver.ZigzagLevelOrder(root), new List> {}); + } + + } +}