【LeetCode】BiNode

本文介绍了一种算法,将二叉搜索树原地转换为单向链表,同时保持节点值的顺序不变。通过中序遍历,将每个节点的左子节点设置为空,右子节点作为链表的下一节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

二叉树数据结构TreeNode可用来表示单向链表(其中left置空,right为下一个链表节点)。实现一个方法,把二叉搜索树转换为单向链表,要求值的顺序保持不变,转换操作应是原址的,也就是在原始的二叉搜索树上直接修改。

返回转换后的单向链表的头节点。

简单来说就是把二叉搜索树变成链表,不过是原地修改,改完的树只有右边节点

解题思路

中序遍历,根左右

package treenode;

public class convertBiNode {

    public static void main(String[] args) {
        TreeNode t1 = new TreeNode(1);
        TreeNode t2 = new TreeNode(2);
        TreeNode t3 = new TreeNode(3);
        t2.left = t1;
        t2.right = t3;

        convertBiNode test = new convertBiNode();
        test.convertBiNode(t2);
    }

    // 定义一个全局头指针
    // 不断移动
    TreeNode rootNode;

    public TreeNode convertBiNode(TreeNode root) {
        //头指针实例化
        rootNode = new TreeNode(0);

        //备份这个头指针
        TreeNode headNode = rootNode;
        // 开始中序遍历
        midOrderRe(root);

        //返回二叉树的第一个节点
        return headNode.right;
    }

    public void midOrderRe(TreeNode r) {
        //跳出递归的条件
        if (r == null) {
            return;
        }
        //中序遍历,根左右
        midOrderRe(r.left);
        //将root放入链表最后
        rootNode.right = r;
        //将二叉树中节点原有的left置空
        r.left = null;
        //指向头指针的最后一节点
        rootNode = rootNode.right;
        midOrderRe(r.right);
    }
}

其实简单画个1,2,3的二叉搜索树推一遍就行了,递归不多

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值