【问题标题】:Balanced binary search tree from doubly linkedlist来自双向链表的平衡二叉搜索树
【发布时间】:2016-05-04 05:19:02
【问题描述】:

我正在尝试编写这个函数,它接受一个双链接列表并在适当的位置构造一个平衡的二叉搜索树。 TreeNode.left 相当于前一个指针,TreeNode.right 相当于下一个指针。我从这里的程序中获得灵感,但这不起作用:

http://www.geeksforgeeks.org/in-place-conversion-of-sorted-dll-to-balanced-bst/

private static TreeNode constructBST2(TreeNode head, int m, int n) {
    TreeNode temp = null;
    if (m < n) {
        int mid = m + (n - m)/ 2;
        TreeNode left = constructBST2(head, m, mid);
        temp = head;
        temp.left = left;
        head = head.right;
        temp.right = constructBST2(head, mid + 1, n);
    }
    return temp;
}

【问题讨论】:

标签: data-structures linked-list binary-search-tree doubly-linked-list tree-balancing


【解决方案1】:

让我试试:

private static TreeNode constructBST2(TreeNode root, int r, int m, int n) {
    if (m < n) {
        int leftTreeMid = m + (int)Math.ceil((r - m) / 2);
        int delta = r - leftTreeMid;
        TreeNode left = root;
        for (int i = 0; i < delta; i++)
            left = left.left;
        root.left = left;
        constructBST2(left, leftTreeMid, m, r - 1);

        int rightTreeMid = r + (int)Math.ceil((n - r) / 2);
        delta = rightTreeMid - r;
        TreeNode right = root;
        for(int i = 0; i < delta; i++)
            right = right.right;
        root.right = right;
        constuctBST2(right, rightTreeMid, r + 1, n);
    }
    return root;
}

我根本没试过,也许你可以试试,告诉我它是否有效。

【讨论】:

  • 实际上,我确信树的最底部节点(叶节点)仍然会错误地指向它们的左/右节点。但是,如果此示例代码对您有意义,那么您应该不难修复该部分。
猜你喜欢
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
  • 2012-05-13
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
相关资源
最近更新 更多