当前位置: 首页 > 知识库问答 >
问题:

如何将双链表转换为二叉树

牛凌
2023-03-14
    struct cnode
{
  int info;
  struct cnode *next;
  struct cnode *previous;
};
typedef struct cnode cnode;
EX.     4
      /  \
     2    6
    / \  / \
   1   3 5  7

这就是我到目前为止的代码(由于递归方面的困难,这并不是太多)

void *convert(cnode *head){
  if(head == NULL)
    return;
  int count = 0;
  cnode *tempHead = head;
  while(tempHead != NULL){
    count++;
    tempHead = tempHead->next;
  }
  int move = (count/2) + (count%2);
  int i;
  for(i=1; i<move; i++){
    head = head->next;
  }
}

几乎只是将头部指针设置为中间信息(4)

共有1个答案

竺鸿骞
2023-03-14

我想我明白了;您将从cnodes生成一个平衡的二叉树,其中previous和next指针被重用用于左子树和右子树。

...这就是你的算法

>

  • 查找二叉树的中间节点(您已经这样做了)。
  • 将左半部分转换为二叉树。左半部分是原始头,最后一个元素(中间->Previous)的下一个指针现在为NULL。
  • 将此左半部分链接到中间->上一个(被劫持为左子树)。
  • 将右半部分变成二叉树;这是以中间->Next为首的。使其成为middle->next的新值。

  •  类似资料:
    • 我如何转换使用以下代码,我的二叉树到一个简单的链表。这也许可以用递归来完成。 因此,如果根为NULL,也就是,如果函数没有收到有效的指针,则返回错误消息。 如果根是叶,这是,如果左子节点和右子节点都为NULL,您必须将其添加到叶节点列表中。

    • 这个问题是在最近的一次编码采访中被问到的。 问:给定一个二叉树,写一个程序把它转换成双链表。双链表中的节点按zig-zag级顺序遍历形成的序列排列

    • 我想到了以下几点: < li >将树退化为链表,在退化的同时,用链表中的节点对象及其索引创建一个动态数组 看起来像这样 这是一个学生必须在没有任何过去考试参考的情况下编码的问题。我方法的问题是,我几乎不可能在30分钟内正确地写下所有代码,如果我事先记住一些代码,也许是可能的。我想知道是否有一个更简单、更可行和优雅的解决方案来将任何二叉树转换为适当的堆?

    • 本文向大家介绍Python二叉搜索树与双向链表转换算法示例,包括了Python二叉搜索树与双向链表转换算法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python二叉搜索树与双向链表转换算法。分享给大家供大家参考,具体如下: 题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 普通的二叉树也可以转换成双向链表

    • 本文向大家介绍Python二叉搜索树与双向链表转换实现方法,包括了Python二叉搜索树与双向链表转换实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python二叉搜索树与双向链表实现方法。分享给大家供大家参考,具体如下: 更多关于Python相关内容可查看本站专题:《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》

    • 这不是一个重复的问题。 当我们将排序数组转换为BST时,我们确实从元素的左部分和右部分得到左和右。而当我们试图转换双链表时,为什么我们从得到正确的结果。 基本上,我想明白为什么会有差别,以及如何向某人解释。