0
点赞
收藏
分享

微信扫一扫

37. (★二叉搜索树、循环双向链表)剑指 Offer 36. 二叉搜索树与双向链表

题目描述

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。

思路:没有思路

学到的内容

1)二叉搜索树:前序遍历(中序)结果是递增的!

2)循环链表:节点都是双向可达的,记录前后节点;并且头指尾,尾指头!

3)注意二叉树的前中后序遍历查找!

代码

class Solution {
    //创建一个前置节点,不停移动记录,一个头节点记录链表
    Node pre,head;
    public Node treeToDoublyList(Node root) {
        //左指向小,右指向大。作为前驱和后继节点
        //进入的位置不确定大小
        if(root == null) return null;
        //主要的逻辑实现
        dfs(root);
        //两端特殊的处理
        head.left = pre;//此时的pre已经走到了最后一个节点
        pre.right = head;
        return head;

    }
    //让之前节点的右
    void dfs(Node root){
        if(root == null) return;
        //这一步就进到了最里面,最左边的值
        dfs(root.left);
        //如果前一个节点不为空,就将左节点指向当前的节点
        if(pre != null) pre.right = root;
        //如果前一个节点为空,就需要一个头节点,记录链表
        else head = root;
        root.left = pre;
        //往后移动
        pre = root;
        dfs(root.right);

    }
    /*
    前序遍历
    void dfs(Node node){
        if(root == null) return;
        dfs(node.left);
        System.out.println(node.val);
        dfs(node.right);
    }
    */
}
举报

相关推荐

0 条评论