【数据结构刷题java】将二叉搜索树转化成有序双向链表

数据结构刷题java——将二叉搜索树转化成有序双向链表

[题目链接](二叉搜索树与双向链表_牛客题霸_牛客网 (nowcoder.com))

因为是二叉搜索树,所以使用中序遍历就可以将二叉树转变为有序的。

同时,二叉树和链表相同,都是有3个节点:一个数值域,两个指针域

综上两条性质,可以在中序遍历的时候改变二叉树左右指向,使它变为双向链表

这个题真的是太妙了,就是从分利用了二叉搜索树和中序遍历

具体的解释在代码注释中:

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

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

    }

}
*/
public class Solution {
    public TreeNode prev=null;
    public void Inoreder(TreeNode root){
        if(root==null) return;
        //中序遍历之左子树遍历
        Inoreder(root.left);
        //中序遍历之操作:改变节点的指向
        //第一次root.left指向的prev是null,后来的prev
        //是保存的前一次的中序遍历的值,正好使整个链表有序
        root.left=prev;
        //如果使非空的节点,因为使双向链表,所以prev和root要链接起来
        if(prev!=null)
            prev.right=root;
        //保存当前的根节点,好返回给上一层
        prev=root;
        Inoreder(root.right);
        
    }
    public TreeNode Convert(TreeNode pRootOfTree) {
        if(pRootOfTree==null) return null;
        Inoreder(pRootOfTree);
        //找到头节点,对于二叉搜索树来说,
        //一直找左节点直到左节点是空为止
        TreeNode node=pRootOfTree;
        while(node.left!=null){
            node=node.left;
        }
        return node;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值