【发布时间】: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