コード例 #1
0
ファイル: NaryTree.cs プロジェクト: geetikaPaul/DSAlgo
        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, "]");
        }
コード例 #2
0
ファイル: NaryTree.cs プロジェクト: geetikaPaul/DSAlgo
        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));
        }