private void Serialize(NaryNodeWithLevel root, int curLevel, ref string result) { if (root == null) { return; } if (root.level != curLevel) { result = string.Concat(result, "[", root.node.val); } else { result = string.Concat(result, " ", root.node.val); } if (root.node.children != null) { curLevel += 1; foreach (var child in root.node.children) { if (child != null) { Serialize(new NaryNodeWithLevel(child, root.level + 1), curLevel, ref result); } } } result = string.Concat(result, "]"); }
private string SerializeLevel(NaryNode root) { if (root == null) { return("null"); } List <string> resultList = new List <string>(); Queue <NaryNodeWithLevel> queue = new Queue <NaryNodeWithLevel>(); queue.Enqueue(new NaryNodeWithLevel(root, 0)); queue.Enqueue(new NaryNodeWithLevel(null, 0)); int currentLevel = 0; while (queue.Count > 0) { NaryNodeWithLevel cur = queue.Dequeue(); if (currentLevel < cur.level) { currentLevel = cur.level; queue.Enqueue(new NaryNodeWithLevel(null, currentLevel)); } if (cur.node == null) { // result = string.Concat(result, " null"); resultList.Add("null"); continue; } //result = string.Concat(result, " ", cur.node.val); resultList.Add(cur.node.val.ToString()); if (cur.node.children != null) { foreach (var child in cur.node.children) { if (child != null) { queue.Enqueue(new NaryNodeWithLevel(child, cur.level + 1)); } } } else { queue.Enqueue(new NaryNodeWithLevel(null, cur.level + 1)); } } for (int i = resultList.Count - 1; i >= 0; i--) { if (resultList[i] == "null") { resultList.RemoveAt(i); } else { break; } } return(string.Join(" ", resultList)); }