我有一个包含两个链接的链接列表 - next
和another
。最初,所有another
都占有null
。现在,我正在尝试将此转换为二叉树,其中next
持有liftChild
和another
持有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;
}
}
答案 0 :(得分:0)
如果要在遍历它之前更改要遍历的链接,则需要在更改链接之前在其他变量中存储遍历的结果。然后在更改后,您可以使用临时副本进行遍历。