【发布时间】:2011-09-22 07:22:01
【问题描述】:
谁能建议一种将二叉搜索树转换为单链表的算法。 另请注意,在转换的每个步骤中,列表中的最高值节点应指向列表中的最小值节点。
【问题讨论】:
-
@Sarnold :如果你专注于提供算法会更好。
-
不是作业题,是微软面试题
标签: linked-list binary-search-tree
谁能建议一种将二叉搜索树转换为单链表的算法。 另请注意,在转换的每个步骤中,列表中的最高值节点应指向列表中的最小值节点。
【问题讨论】:
标签: linked-list binary-search-tree
if(!tree.isEmpty())
{
Node node1 = tree.removeMin();
Node node2;
Node currentNode;
Node temp;
if(!tree.isEmpty())
{
node2 = tree.removeMax();
node2.setNext(node1);
currentNode = node2;
while(!tree.isEmpty())
{
temp = tree.removeMin();
temp.setNext(currentNode);
currentNode = temp;
}
}
Node head = temp;
}
这符合单链表,列表中的最大值总是指向列表中的最小值。没有其他资格。
【讨论】:
public static LinkedListNode<Integer> constructLinkedList(BinaryTreeNode<Integer> root) {
if(root == null)
return null;
LinkedListNode<Integer> newHead = constructLinkedList(root.left);
LinkedListNode<Integer> temp = newHead;
if(newHead == null)
newHead = new LinkedListNode<>(root.data);
else
{
while(temp != null && temp.next != null)
{
temp = temp.next;
}
temp.next = new LinkedListNode<>(root.data);
}
LinkedListNode<Integer> rightHead = constructLinkedList(root.right);
if(newHead.next == null)
newHead.next = rightHead;
else
temp.next.next = rightHead;
return newHead;
}
【讨论】: