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

牛客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;
    }
}
相关推荐
leaves falling5 分钟前
c语言- 有序序列合并
c语言·开发语言·数据结构
代码无bug抓狂人14 分钟前
前缀和算法和单调队列算法(经典例题)
数据结构·算法
We་ct15 分钟前
LeetCode 14. 最长公共前缀:两种解法+优化思路全解析
前端·算法·leetcode·typescript
leaves falling19 分钟前
BC68 X形图案
数据结构·算法
Lun3866buzha22 分钟前
【机场目标检测】基于YOLOv26的飞机目标检测算法实现_1
算法·yolo·目标检测
Q741_14724 分钟前
C++ 优先级队列 大小堆 模拟 力扣 1046. 最后一块石头的重量 每日一题
开发语言·c++·算法·leetcode·优先级队列·
blazeDP30 分钟前
洛谷P7224 [RC-04] 子集积解析
算法·深度优先·图论
June bug34 分钟前
【python基础】常见的数据结构的遍历
开发语言·数据结构·python
Anastasiozzzz1 小时前
常见限流算法--【令牌桶】【漏桶】【固定窗口】【滑动窗口】
java·redis·后端·算法·面试
凯酱1 小时前
Java8 遍历List 使用stream().parallel()并发安全
数据结构·windows·list