首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >大树列表递归程序

大树列表递归程序
EN

Stack Overflow用户
提问于 2013-07-03 18:47:04
回答 3查看 1.6K关注 0票数 4

我遇到了一个有趣的问题叫做“伟大的树列表问题”。问题如下:

在有序二叉树中,每个节点包含一个数据元素,以及指向子树的“小”和“大”指针.All“小”子树中的节点小于或等于父节点中的数据。“大”子树中的所有节点都大于父节点。循环双链接列表由前一个和下一个指针组成。

问题是取一棵有序的二叉树,并重新排列内部指针,从而形成一个循环的双链接列表。“小”指针应该扮演“先前”的角色,“大”指针应该扮演“下一步”的角色。应该对列表进行排列,使节点按递增顺序排列。我必须编写一个递归函数&返回指向新列表的head指针。

手术应在O(n)时间内完成。

我知道递归会在树下进行,但是如何递归地将小的和大的子树转换成列表,我还必须将这些列表与父节点一起附加。

我该怎么处理这个问题?我只需要一个方向来解决这个问题!

EN

Stack Overflow用户

发布于 2013-07-03 19:59:51

递归编程的关键是想象您已经有了解决方案。

因此,您已经有了一个函数recLink(Tree t),它接收到指向树的指针,将该树转换为一个双链接的循环列表,并返回指向列表头部(最左边)节点的指针:

代码语言:javascript
复制
recLink( n={Node: left, elt, right}) =  // pattern match tree to a full node
  rt := recLink( right);                // already
  lt := recLink( left);                 //   have it
  n.right := rt;       n.left := lt.left;        // middle node
  lt.left.right := n;  rt.left.right := lt;      // right edges
  lt.left := rt.left;  rt.left := n;      
  return lt;

完成边缘箱(空子枝等)。:)

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17455871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档