美文网首页
剑指 Offer 36 二叉搜索树与双向链表

剑指 Offer 36 二叉搜索树与双向链表

作者: itbird01 | 来源:发表于2022-01-10 07:39 被阅读0次
题目.png

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

解题思路

解法1:
1.二叉搜索树的中序遍历结果为有序链表
2.在中序遍历过程中,改变left和right指针,left指向前节点,right指向下一个节点
3.此时pre指向为尾节点,head为头节点,将头尾节点相连即可

解题遇到的问题

后续需要总结学习的知识点

##解法1
class Solution {
    public Node treeToDoublyList(Node root) {
        if (root == null) {
            return null;
        }

        // 中序遍历,将二叉搜索树,转换为有序链表
        dfs(root);
        // 此时pre指向为尾节点,head为头节点,将头尾节点相连即可
        pre.right = head;
        head.left = pre;
        return head;
    }
    Node pre = null;
    Node head = null;
    private void dfs(Node root) {
        if (root == null) {
            return;
        }

        dfs(root.left);
        // 在转换过程中,改变left和right指针
        if (pre == null) {
            pre = root;
            head = pre;
        } else {
            pre.right = root;
            root.left = pre;
            pre = root;
        }
        dfs(root.right);
    }

}

相关文章

网友评论

      本文标题:剑指 Offer 36 二叉搜索树与双向链表

      本文链接:https://www.haomeiwen.com/subject/qcdvqrtx.html