美文网首页
二叉排序树(BST)转双向链表

二叉排序树(BST)转双向链表

作者: 别拿爱情当饭吃 | 来源:发表于2018-10-16 15:40 被阅读15次

问题描述:输入一颗二叉排序树(BST),将其转换为一个排序的双向链表。

要求:不能创建任何新的节点,只能在调整树中的节点的指针方向。

思路:

1.二叉搜索树的特性是:中序遍历是有序的,单调递增的,左子树的元素的值都比根节点的元素值小,右子树的元素的值都比根节点的元素值大。

2.由BST的特性可以知道,BST转化为双向链表后,根节点的前一个元素是左子树的最右边节点,根节点的后一个元素是右子树的最左边节点。

3.左右子树的转换过程一致,所以是一个递归的过程。

4.最后,找出双向链表的头指针。(在左子树的最左边)

代码如下:

/**
 * @author Aaron
 * @date 2018/10/16 下午2:25
 * @function BST转换为一个双向链表
 */
public class BSTConvertToDeList {
    public static class TreeNode{
        int val;
        TreeNode left;
        TreeNode right;
        public TreeNode(int val){
            this.val = val;
        }
    }

    public static TreeNode convert(TreeNode root){
        if(root==null){
            return null;
        }
        if(root.left!=null){
            //先转换左子树,获得转换后的头指针
            TreeNode leftHead = convert(root.left);
            // 获得指向左子树的最后一个元素的指针
            while (leftHead.right!=null){
                leftHead = leftHead.right;
            }
            // 与root链接,注意双向
            root.left = leftHead;
            leftHead.right = root;
        }

        if (root.right!=null){
            //先转换右子树,获得转换后的头指针
            TreeNode rightHead = convert(root.right);
            //获得指向右子树的最后一个元素的指针
            while (rightHead.left!=null){
                rightHead = rightHead.left;
            }
            //与root连接,注意双向
            rightHead.left = root;
            root.right = rightHead;
        }

        //找出双向链表的头指针(左子树的最左边)
        while (root.left!=null){
            root = root.left;
        }
        //返回双向链表的头指针
        return root;
    }
}

相关文章

  • 426. Convert Binary Search Tree

    BST转双向链表。输入一颗BST,将BST转换成一个排序的循环双向链表,要求不能创建任何新的节点,只能调整树中节点...

  • 1.路径之和 2.最近公共祖先 3.是否后序bst 4.二叉树转

    3.是否是bst的后续便利 4.二叉树转链表 5.bst转双向链表 6.第k小的元素 7.序列化8.删除bst一个点

  • 二叉排序树(BST)转双向链表

    问题描述:输入一颗二叉排序树(BST),将其转换为一个排序的双向链表。 要求:不能创建任何新的节点,只能在调整树中...

  • BST与双向链表

    把BST转换为双向链表 给出一棵BST,将其转换为双向链表,left保存前节点,right保存后节点。 例如: ...

  • 二叉排序树转双向链表

    排序二叉树转换为排序双向链表 题目:输入一棵二叉排序树,将该二叉排序树转换成一个排序的带头结点的双向链表。如: 转...

  • 排序二叉树转换为排序双向链表

    题目:输入一棵二叉排序树,将该二叉排序树转换成一个排序的带头结点的双向链表。如: 转换成双向链表4<->6<->8...

  • 双向链表&双向循环链表

    链表分为:单链表、单向循环链表、双向链表、双向循环链表本节主要说明:双向链表、双向循环链表 定义结点 一、双向链表...

  • 线性表-双向链表与双向循环链表

    双向链表 双向链表示意图如下: 数据结构定义 创建双向链表 双向链表插入元素 双向链表删除元素 双向链表打印元素 ...

  • day03-双向链表

    双向链表: 单向链表只能单向查找,双向链表可以双向查找。 啥是双向链表? 双向链表可以双向查数据,所以就不存在单向...

  • 线性表--链式存储结构--双向链表

    双向链表 一、双向链表结构 双向链表结点结构 既然单链表可以有循环链表,那么双向链表当然也可以有。 由于这是双向链...

网友评论

      本文标题:二叉排序树(BST)转双向链表

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