我正在阅读Cormen算法手册(二叉搜索树章节),它说有两种方法可以在没有递归的情况下遍历树:
使用堆栈和 更复杂但更优雅 不使用堆栈的解决方案 假设两个指针可以 为平等而测试
我已经实现了第一个选项(使用堆栈),但不知道如何实现后者。 这不是一个家庭作业,只是阅读教育自己。
有关如何在C#中实现第二个的任何线索?
答案 0 :(得分:6)
当然可以。你没有说你想要什么样的遍历,但是这里是有序遍历的伪代码。
t = tree.Root;
while (true) {
while (t.Left != t.Right) {
while (t.Left != null) { // Block one.
t = t.Left;
Visit(t);
}
if (t.Right != null) { // Block two.
t = t.Right;
Visit(t);
}
}
while (t != tree.Root && (t.Parent.Right == t || t.Parent.Right == null)) {
t = t.Parent;
}
if (t != tree.Root) { // Block three.
t = t.Parent.Right;
Visit(t);
} else {
break;
}
}
要获得预订或订购后,您需要重新排列块的顺序。
答案 1 :(得分:0)
假设树中的节点是引用并且值是引用,您始终可以调用静态ReferenceEquals method on the Object class进行比较,以查看任何两个节点/值的引用是否相同。