關鍵點:1.棧頂先插入root節點,隨即將其pop()。
2.大的先進,二元查詢樹右邊最大,所以 right先進棧,left後進。
3.迴圈開始先置換head節點,同時pop棧頂元素。
關鍵點:
1.每次操作前head指向當前操作節點。
2.head不為空,進棧。
3.直至索引到左子樹為null,head==null,pop()棧頂,head置為當前節點右子樹,繼續迴圈判定head。
*head不為空進棧,置換為下一左子樹。繼續迴圈判定。
*head為空出棧,置換為下一右子樹。繼續迴圈判定。
關鍵點:
1.輸出棧的特點:根節點永遠最先進棧,因為先進後出,正好符合後根遍歷的特點。
2.排序棧的特點:根節點且右子樹永遠最後進棧,每一輪挑出最大的給輸出棧。後進先出符合此條件。
3.每一輪迴圈操作的head結點,就是將要進輸出棧的成員。也是排序棧最大的。
*以此迴圈,直到最小的節點進入輸出棧,迴圈結束輸出。
關鍵點:
1.head在未進行pop操作前就是root節點。pop操作後,記錄出棧的棧頂元素。
2.再迴圈取這次迴圈的棧頂current,而head是上一次迴圈的棧頂。
3.判定 左節點進棧 那麼(左節點不為空,且head不為當前操作節點的子節點)
4.判定 右節點進棧 那麼 (右節點不為空,且head不為當前節點的右節點。同父級節點下的左子節點比右子節點先進去先pop,所以head有可能為左節點)
3 4兩個判定:遵循左右根輸出。層次遞進,索引最深,左進 左出 右進 右出 根出(直至root).......
遞迴 把二元查詢樹轉變成排序的雙向鍊錶
題目 輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只調整指標的指向。比如將二元查詢樹 10 6 14 4 8 12 16 轉換成雙向鍊錶 4 6 8 10 12 14 16。大思路是 中序遍歷。小思路 把二叉樹的左右孩子看成雙鏈表中的聯絡兩邊借點的東東。最開...
判斷該陣列是不是某二元查詢樹的後序遍歷的結果
題目 輸入乙個整數陣列,判斷該陣列是不是某二元查詢樹的後序遍歷的結果。如果是返回true,否則返回false。例如輸入5 7 6 9 11 10 8,由於這一整數序列是如下樹的後序遍歷結果 8 6 10 5 7 9 11 因此返回true。如果輸入7 4 6 5,沒有哪棵樹的後序遍歷的結果是這個序列...
判斷該陣列是不是某二元查詢樹的後序遍歷的結果
題目 輸入乙個整數陣列,判斷該陣列是不是某二元查詢樹的後序遍歷的結果。如果是返回true,否則返回false。例如輸入5 7 6 9 11 10 8,由於這一整數序列是如下樹的後序遍歷結果.8 6 10 5 7 9 11 因此返回true。如果輸入7 4 6 5,沒有哪棵樹的後序遍歷的結果是這個序列...