什么遍历会产生我需要的输出
What traversal will produce the output I need
我有一棵这种形式的节点树:
我需要能够遍历树以生成输出:
a / b + c
标记为 'node' 的节点用于结构,我知道哪些节点包含正确的值,因此输出可以是:
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);
}
}
}
但是这个 returns 列表:
根,节点,c,节点,+,节点,节点,b,节点,/,节点,a
(从左到右)
我是傻了...
我只需要反转输出即可。
只是那些日子中的一个-_-
我有一棵这种形式的节点树:
我需要能够遍历树以生成输出:
a / b + c
标记为 'node' 的节点用于结构,我知道哪些节点包含正确的值,因此输出可以是:
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);
}
}
}
但是这个 returns 列表:
根,节点,c,节点,+,节点,节点,b,节点,/,节点,a
(从左到右)
我是傻了...
我只需要反转输出即可。
只是那些日子中的一个-_-