劍指 Offer 36. 二叉搜尋樹與雙向連結串列
阿新 • • 發佈:2022-03-16
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); } }