多叉树(multi-way tree)的先序遍历C#实现(非递归方法)

var tree = new Node("大纲",
                new List<Node> {
                    new Node("前言", new List<Node> {
                        new Node("第一段", null),
                        new Node("第二段", null)
                    }),
                    new Node("自然地理", new List<Node>{
                        new Node("第三段", null),
                        new Node("第四段", null)
                    }),
                    new Node("工程地质条件", null)
                }
            );
public static IList<string> PreorderTraversal(Node root)
        {
            //返回的list
            var forReturn = new List<string>();
            if (root == null) return forReturn;
            //定义一个栈
            var stackTemp = new Stack<Node>();
            //在栈的顶部插入根节点
            stackTemp.Push(root);

            while (stackTemp.Any())
            {
                //移除栈顶部的对象
                var curNode = stackTemp.Pop();
                //将该对象add至返回的list中
                forReturn.Add(curNode.val);
                if (curNode.children != null)
                {
                    for (var i = curNode.children.Count - 1; i >= 0; i--)
                        stackTemp.Push(curNode.children[i]);
                }
            }
            return forReturn;
        }

 

posted @ 2020-04-11 14:19  gisliuliang  阅读(1029)  评论(0编辑  收藏  举报