426. Convert Binary Search Tree to Sorted Doubly Linked List

This is a "In Order" traversal problem, because the order of the result is a in order or the tree.

1. The problem need to return the pointer to the smallest element of the linked list, so we first need to find the smallest element.

2. The problem requires "We want to do the transformation in place", that mean we should not create a new link.

3. We need a "pre-node" to indicate the last node that was just traversed before the current node.

The solution is as following, time complexity is O(n):

    private Node pre = new Node();  //3. pre-node
    public Node treeToDoublyList(Node root) {
        if(root==null)
            return null;
        Node head = root;
        while(head.left!=null){
            head = head.left;   //1. find the smallest element
        }
        inOrder(root);
        pre.right = head;
        head.left = pre;
        return head;
    }
    
    private void inOrder(Node root){ //2. in place
        if(root == null)
            return;
        inOrder(root.left);
        pre.right = root;
        root.left = pre;
        pre = root;
        inOrder(root.right);
    }

 

上一篇:python使用OpenCV加载图像为RGB图并可视化加载的图像(Convert to RGB and show image)


下一篇:发现一个有意思的bbs网站,发现一个Waves开源项目