比较两个指针是否相等的二叉搜索树遍历

发布于 2024-08-23 14:04:22 字数 226 浏览 6 评论 0原文

我正在阅读 Cormen 算法书(二叉搜索树章节),它说有两种无需递归即可遍历树的方法:

使用堆栈和 更复杂但更优雅 不使用堆栈的解决方案,但 假设两个指针可以 测试是否相等

我已经实现了第一个选项(使用堆栈),但不知道如何实现后者。 这不是作业,只是为了教育自己而读书。

关于如何在 C# 中实现第二个的任何线索?

I'm reading the Cormen algorithms book (binary search tree chapter) and it says that there are two ways to traverse the tree without recursion:

using stack and
a more complicated but elegant
solution that uses no stack but
assumes that two pointers can be
tested for equality

I've implemented the first option (using stack), but don't know how to implement the latter.
This is not a homework, just reading to educate myself.

Any clues as to how to implement the second one in C#?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

话少情深 2024-08-30 14:04:22

当然可以。您没有说您想要什么样的遍历,但这是中序遍历的伪代码。

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;
  }
}

要获得前序或后序,您需要重新排列块的顺序。

Sure thing. You didn't say what kind of traversal you wanted, but here's the pseudocode for an in-order traversal.

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;
  }
}

To get pre- or post-order, you rearrange the order of the blocks.

若言繁花未落 2024-08-30 14:04:22

假设树中的节点是引用并且值是引用,您始终可以调用静态 Object 类上的ReferenceEquals 方法 进行比较以查看任意两个节点/值的引用是否相同。

Assuming that the nodes in the tree are references and the values are references, you can always call the static ReferenceEquals method on the Object class to compare to see if the references for any two nodes/values are the same.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文