1. 程式人生 > 其它 >劍指 Offer 36. 二叉搜尋樹與雙向連結串列

劍指 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); } }