题解 | 二叉搜索树与双向链表

二叉搜索树与双向链表

https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5

import java.util.*;
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}
*/
public class Solution {
    private TreeNode prev = null;//记录当前节点的前序节点
    private TreeNode head = null;//记录链表头节点

    public TreeNode Convert(TreeNode pRootOfTree) {
        //将BST转换为排序双向链表:每个节点的left指针指向前驱节点,right指向后继节点
        //1. 解决思想:中序遍历:左--> 根--> 右 + 指针修改
        //2. 指针操作步骤:
        //创建指针prev:记录当前节点的前驱节点。
        //创建指针cur指向当前节点。当遍历到cur时,将cur.left指向prev,将prev.right指向cur
        //更新prev为当前节点cur
        
        if(pRootOfTree == null){
            return null;
        }

        inorder(pRootOfTree);
        

        return head;
    }

    //inorder方法实现中序遍历
    private void inorder(TreeNode cur){
        if(cur == null){
            return;
        }
        //1. 遍历左子树
        inorder(cur.left);
        //2. 处理根节点
        if(prev == null){
            //第一个节点为链表表头
            head = cur;
        }else{
            prev.right = cur;
            cur.left = prev;
        }
        prev = cur;
        //3. 遍历右子树
        inorder(cur.right);
    }

}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务