【问题标题】:What traversal will produce the output I need什么遍历会产生我需要的输出
【发布时间】:2017-02-24 16:42:16
【问题描述】:

我有一个这种形式的节点树:

我需要能够遍历树才能产生输出:

a / b + c

标记为“节点”的节点用于结构,我知道哪些节点包含正确的值,因此输出可以是:

a节点/b节点节点+节点c节点

当多余的节点被移除时,输出仍然是:

a / b + c

我认为我需要实现 InOrder 遍历,但我正在努力让任何东西正常工作。

编辑:

public IEnumerable<Node> PostOrder(Node start, Func<Node, IEnumerable<Node>> getNeighbours)
{
    HashSet<Node> visited = new HashSet<Node>();
    Stack<Node> stack = new Stack<Node>();
    stack.Push(start);

    while (stack.Count != 0)
    {
        Node current = stack.Pop();
        visited.Add(current);
        yield return current;

        IEnumerable<Node> neighbours = getNeighbours(current).Where(node => !visited.Contains(node));

        foreach (Node neighbour in neighbours)
        {
            stack.Push(neighbour);
        }
    }
}

但是这会返回列表:

根、节点、c、节点、+、节点、节点、b、节点、/、节点、a

(从左到右)

【问题讨论】:

  • 你试过后序遍历吗?
  • @LeoBartkus 是的,我会将我尝试使用的算法添加到问题中

标签: c# tree nodes traversal inorder


【解决方案1】:

我是傻...

我只需要反转输出。

只是其中的一天-_-

【讨论】:

    猜你喜欢
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多