把二叉搜素树转成有序双向链表


一、题目描述

题目描述:
在这里插入图片描述
在这里插入图片描述

二、二叉搜索树特点及解题思路

1.每个节点都比它的左节点大,比它的右节点小
2.二叉搜索树的中序遍历是有序的
比如:
在这里插入图片描述

该数中序遍历:1345678,然后转换成双向链表,也就是按顺序把各个节点互相连起来,示意图如下:
在这里插入图片描述
那么这里很容易发现,left变成了双向链表的前驱,right变成了双向链表的后继,我们在中序遍历的过程中,需要修改每个节点的left和right,最后我们返回节点1即可。

三、代码实战

public class Solution {
    TreeNode prev=null;
    public void inorder(TreeNode cur){//中序遍历-左根右
        if(cur==null){
            return ;
        }
        inorder(cur.left);
        //第一次走到这里说明到了最左边的节点
        cur.left=prev;
        //如果是第一次执行这一行,prev是null,把最左边的左边置为null
        //如果不是第一次执行这一行,说明是递归上来的,prev是当前cur的前序
        if(prev!=null){
            prev.right=cur;
        }
        prev=cur;
        inorder(cur.right);
    }
    public TreeNode Convert(TreeNode pRootOfTree) {
        if(pRootOfTree==null){
            return null;
        }
        inorder(pRootOfTree);
        //中序遍历完,已经变成了双向链表
        
        TreeNode head=pRootOfTree;//我们这里用pRootOfTree作为链表中的一个元素来找头节点
        while(head.left!=null){
            head=head.left;
        }
        //走到这里,head为头节点
        return head;
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

劲夫学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值