将链表转换为二叉树

时间:2014-12-05 05:00:59

标签: java data-structures tree linked-list binary-tree

我有一个包含两个链接的链接列表 - nextanother。最初,所有another都占有null。现在,我正在尝试将此转换为二叉树,其中next持有liftChildanother持有rightChild。但是,我想在O(n)和恒定空间中这样做。我已经尝试了很多。以下是我的代码。我正在通过级别顺序遍历生成的树来验证结果。目前,我知道什么是错误,但不知道如何解决它。这里的错误是在while循环中,我正在正确地更改node的链接,但这意味着我最后无法node = node.next因为node' s next已经指向列表中的某个位置。所以,我不知道如何遍历每个节点。任何提示,帮助表示赞赏。不是,不是面试问题或任何事情。只是想学习数据结构。所以,这棵树和ll的东西!

public class LlToBt {

  public SpecialNode llToBt(SpecialNode node) {
    SpecialNode temp = node;
    SpecialNode returnNode = node;

    if(node == null)
      return null;
    if(node.next == null)
      return node;

    node = returnNode;
    while(node != null) {
      SpecialNode currentNode = node;

      temp = temp.next;
      if(temp == null) {
        //node.next = null;
        //node.another = null;
        return returnNode;
      }
      node.next = temp;

      temp = temp.next;
      if(temp == null) {
        //node.next = null;
        //node.another = null;
        return returnNode;
      }
      node.another = temp;

      node = currentNode.next;

    }

    return returnNode;
  }
}

1 个答案:

答案 0 :(得分:0)

如果要在遍历它之前更改要遍历的链接,则需要在更改链接之前在其他变量中存储遍历的结果。然后在更改后,您可以使用临时副本进行遍历。