美文网首页
37、二叉搜索树与双向链表

37、二叉搜索树与双向链表

作者: GIndoc | 来源:发表于2019-10-22 01:11 被阅读0次
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

链接:https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5

二叉搜索树的根节点大于左子树所有的节点,小于右子树所有的节点

我们在转换成排序的双向链表时,原先指向左子节点的引用要调整为指向左子树中最大的一个节点,原先指向右子节点的引用要调整为指向右子树中最小的一个节点。

按照中序遍历的顺序,当我们遍历转换到根节点时,它的左子树已经转化成一个排序的链表了,并且链表的最后一个节点是当前值最大的节点。当它和根节点链接起来后,此时链表的最后一个节点就是根节点(当前值最大的节点)。然后接着遍历转换右子树,并把根节点和右子树中最小的节点链接起来。

/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;
    }

}
*/
public class Solution {
    
    // 用于保存链表的最后一个节点
    private TreeNode lastNode = null;
    
    public TreeNode Convert(TreeNode pRootOfTree) {
        convert(pRootOfTree);
        while (lastNode != null && lastNode.left != null) {
            lastNode = lastNode.left;
        }
        return lastNode;
    }
    
    private void convert(TreeNode node) {
        if (node == null) return;
        // 转换左子树为链表
        if (node.left != null) {
            convert(node.left);
        }
        // 将当前节点指向左子树的引用left指向链表的最后一个节点
        node.left = lastNode;
        // 如果链表的最后一个节点不为null(链表不为空),则将链表的最后一个节点的right指向当前节点
        if (lastNode != null) {
            lastNode.right = node;
        }
        // 将lastNode指向链表的最后一个节点
        lastNode = node;
        // 如果当前节点有右子树,则遍历转换右子树
        if (node.right != null) {
            convert(node.right);
        }

    }
}

相关文章

  • 27 二叉搜索树与双向链表(二叉树的线索化)

    二叉搜索树与双向链表 题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的...

  • 剑指offer.C++.code26-30

    26. 二叉搜索树与双向链表【分治法】 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任...

  • 面试题36. 二叉搜索树与双向链表

    二叉搜索树与双向链表 题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新...

  • 《剑指offer》— JavaScript(26)二叉搜索树与双

    二叉搜索树与双向链表 题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结...

  • 36二叉搜索树与双向链表

    面试题36:二叉搜索树与双向链表题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何...

  • 剑指offer(二十六)二叉搜索树与双向链表

    点击进入 牛客网题库:二叉搜索树与双向链表 题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要...

  • JZ-026-二叉搜索树与双向链表

    二叉搜索树与双向链表 题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结...

  • 剑指offer 34-66题

    面试题34:二叉树中和为某一值的路径 面试题35:复杂链表的复制 面试题36:二叉搜索树与双向链表 面试题37:序...

  • 将二叉搜索树转化为排序的双向链表

    题目 将二叉搜索树转化为排序的双向链表 例如,下图二叉搜索树转换为图中的排序的双向链表。 解析 转换为排序的双向链...

  • 剑指Offer二

    27.二叉搜索树与双向链表 将二叉搜索树转换成一个排序的双链表,利用二叉搜索树的特性,非空二叉树的左子树上的节点的...

网友评论

      本文标题:37、二叉搜索树与双向链表

      本文链接:https://www.haomeiwen.com/subject/cmlfvctx.html