【发布时间】:2013-07-01 14:35:50
【问题描述】:
我遇到了一个有趣的问题,称为大树列表问题。问题如下:
在有序二叉树中,每个节点都包含一个数据元素和“small”和“large”指向子树的指针.“小”子树中的所有节点都小于或等于父节点中的数据。 “大”子树中的所有节点都大于父节点。 循环双向链表由previous和next指针组成。
问题是采用有序二叉树并重新排列内部指针以从中生成循环双向链表。 “small”指针应该扮演“previous”的角色,而“large”指针应该扮演“next”的角色”。该列表应排列成节点按升序排列。我必须编写一个递归函数并将头指针返回到新列表。
操作应该在 O(n) 时间内完成。
我知道递归会沿着树向下,但是如何递归地将大小子树更改为列表,我还必须将这些列表与父节点一起附加。
我应该如何解决这个问题?...我只需要一个解决问题的方向!。
【问题讨论】:
-
所以“有序二叉树”几乎就像一个 BST?
-
递归中序遍历应该可以正常工作。只需确保在访问(修改)节点本身之前存储指向右子树的指针。我想这将是 O(n) 但内存占用可能会变得非常糟糕。 (特别是如果您使用的是有限堆栈)
标签: algorithm pointers recursion tree circular-list