C 陣列集合《四》 二元查詢樹(非遞迴遍歷)

2021-07-26 04:48:09 字數 1651 閱讀 3636

關鍵點: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,沒有哪棵樹的後序遍歷的結果是這個序列...