【问题标题】:BST to Linked listBST 到链表
【发布时间】:2011-09-22 07:22:01
【问题描述】:

谁能建议一种将二叉搜索树转换为单链表的算法。 另请注意,在转换的每个步骤中,列表中的最高值节点应指向列表中的最小值节点。

【问题讨论】:

  • 欢迎来到 Stack Overflow! :) 如果这是一个家庭作业问题,请在您的帖子中添加homework 标签,并在您的问题下方紧跟edit 链接。我们想知道我们什么时候遇到作业问题,以便我们可以提供更好的提示以找到解决方案...
  • @Sarnold :如果你专注于提供算法会更好。
  • 不是作业题,是微软面试题

标签: linked-list binary-search-tree


【解决方案1】:
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;
}

这符合单链表,列表中的最大值总是指向列表中的最小值。没有其他资格。

【讨论】:

  • - 你真的需要检查你的算法。
  • 我在使它更清晰时不小心做了一些更改。我相信现在应该可以正常工作了。
【解决方案2】:
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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多