手撕算法-二叉搜索树与双向链表

牛客BM30。

描述:
https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=295&tqId=23253&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj

分析:

二叉搜索树的中序遍历是递增序列。可以利用中序遍历完成。

同时不能新增节点,只能改变指针方向,left代表左,right代表右。

中序遍历时,会一次遍历从小到大的节点,此时记录前一个节点pre和当前节点cur,将:

pre.right = cur;

cur.left = pre;

pre = cur;

链接后的示意图(参考网图):

代码:

java 复制代码
public class Solution {
    TreeNode pre = null;

    TreeNode head = null;
    public TreeNode Convert(TreeNode pRootOfTree) {
        if (pRootOfTree == null) return pRootOfTree;
        TreeNode cur = pRootOfTree;
        //首先递归到最左最小值
        Convert(pRootOfTree.left);
        if (pre == null) {
            //找到最小值,初始化head与pre
            pre = cur;
            head = cur;
        } else {
            //当前节点与上一节点建立连接,将pre设置为当前值
            pre.right = cur;
            cur.left = pre;
            pre = cur;
        }
        Convert(pRootOfTree.right);

        return head;
    }
}
相关推荐
Q741_1471 分钟前
C++ 队列 宽度优先搜索 BFS 力扣 429. N 叉树的层序遍历 C++ 每日一题
c++·算法·leetcode·bfs·宽度优先
Yzzz-F2 分钟前
P4145 上帝造题的七分钟 2 / 花神游历各国[线段树 区间开方(剪枝) + 区间求和]
算法·机器学习·剪枝
Zzz不能停5 分钟前
堆排序算法及大小堆区别
数据结构·算法
冰冰菜的扣jio12 分钟前
Redis高级数据结构
数据结构·redis·bootstrap
zd84510150015 分钟前
stm32f407 电机多轴联动算法
stm32·单片机·算法
代码游侠17 分钟前
应用——Linux FrameBuffer图形显示与多线程消息系统项目
linux·运维·服务器·开发语言·前端·算法
Eloudy17 分钟前
矩阵张量积(Kronecker积)的代数性质与定理
算法·量子计算
多米Domi01128 分钟前
0x3f 第25天 黑马web (145-167)hot100链表
数据结构·python·算法·leetcode·链表
LYFlied29 分钟前
【每日算法】LeetCode 207. 课程表
算法·leetcode·职场和发展
sali-tec30 分钟前
C# 基于OpenCv的视觉工作流-章7-膨胀
图像处理·人工智能·opencv·算法·计算机视觉