根據以上分析,考慮使用中序遍歷訪問樹的各節點 cur ;並在訪問每個節點時構建 cur 和前驅節點 pre 的引用指向;中序遍歷完成後,最後構建頭節點和尾節點的引用指向即可。
/*
// definition for a node.
class node
public node(int _val)
public node(int _val,node _left,node _right)
};*/
class
solution
public
void
help
(node cur)
help
(cur.left)
;//pre用於記錄雙向鍊錶中位於cur左側的節點,即上一次迭代中的cur,當pre==null時,cur左側沒有節點,即此時cur為雙向鍊錶中的頭節點
if(pre == null)
else
cur.left = pre;
//把cur的指標指向pre,pre是否為null對這句沒有影響,最後會在treetodoublylist()方法中對頭尾節點進行連線
pre = cur;
//即將進行下一次迴圈,那麼pre就應該變成cur了,cur就會變成cur的下乙個節點
help
(cur.right);}
}
劍指Offer 36 二叉搜尋樹與雙向鍊錶
20.5.4 將 二叉搜尋樹 轉換成乙個 排序的迴圈雙向鍊錶 其中包含三個要素 排序鍊錶 節點應從小到大排序,因此應使用中序遍歷 從小到大 訪問樹的節點 雙向鍊錶 在構建相鄰節點 設前驅節點 pre 當前節點 cur 關係時,不僅應 pre.right cur,也應 cur.left pre 迴圈鍊...
《劍指offer》 36二叉搜尋樹與雙向鍊錶
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 public class treenode public class solution 右子樹轉換後,返回頭結點,連線在根節點右側 treenode rightnode conve...
劍指offer 36 二叉搜尋樹與雙向鍊錶
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的迴圈雙向鍊錶。要求不能建立任何新的節點,只能調整樹中節點指標的指向。為了讓您更好地理解問題,以下面的二叉搜尋樹為例 我們希望將這個二叉搜尋樹轉化為雙向迴圈鍊錶。鍊錶中的每個節點都有乙個前驅和後繼指標。對於雙向迴圈鍊錶,第乙個節點的前驅是最後乙個節點,...