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

package leetcode;

public class offer_36 {
    //全局变量保存头结点和上一个结点
    Node preNode,head;
    public Node treeToDoublyList(Node root) {
        if(root==null) {
            return null;
        }
        order(root);
        //循环双向链表,前驱头结点的前驱是尾结点,尾结点的后继是头结点
        preNode.right=head;
        head.left=preNode;       
        return head;
    }
    
    
    //中序遍历
    public void order(Node root) {
        //表示递归结束
        if(root==null) {return;}
        
        order(root.left);
        //preNode为空,表示是头结点
        if(preNode==null) {
            head=root;
        }else {
            //表示为中间结点为中间结点,记录当前节点为上一个结点的后继结点
            preNode.right=root;
        }
        //记录上一个结点为当前结点的前驱节点
        root.left=preNode;
        //保留当前结点
        preNode=root;
        order(root.right);
    }
}

 

posted on 2022-03-16 19:31  一仟零一夜丶  阅读(12)  评论(0)    收藏  举报