一定要抓住二叉查詢樹的中序遍歷結果是乙個公升序陣列的特性!
對二叉查詢樹進行中序遍歷的結果,就是乙個公升序的陣列,因此很多問題,我們都可以先轉到乙個公升序的陣列去考慮,而後對二叉查詢樹進行中序遍歷按,就可以得到同樣的結果。
如題目
關鍵就是要找到二叉查詢樹中位置交換的兩個節點。但是如何找到這兩個節點呢?
我們可以考慮乙個公升序的陣列,在乙個公升序的陣列中如何找到兩個位置交換的節點呢?
例如對於陣列:1,2,7,4,5,6,3,8,9.不難發現,新的陣列存在兩對逆序並相鄰的數字,即7,4和6,3,造成這出現的原因,就是發生了一次交換,一定是較小的書換到了較大的數的位置,較大的數換到了較小的數的位置。所以在這兩對中,我們可以簡單的判斷出:是前一對較大的數和後一對較小的數發生了交換。
當然也有只存在一對逆序的情況,例如1,2,4,3,5,6、是因為交換的兩個數本身是相鄰的。
因此,當我們對二叉查詢樹進行中序遍歷,並在這過程中,找到兩對或者一對逆序,而後進行交換即可。參考**如下:
更簡單的做法:
只儲存需要交換位置的兩個物件,以及前乙個物件(用作判斷)。參考**如下:(9ms,採用棧來模擬中序遍歷)
如果用遞迴會不會速度有所提高?**如下(4ms)
資料結構與演算法 二叉查詢樹
1.建立bst樹 往bst樹中新增節點 公開的介面函式 param node 需要新增到bst樹的那個節點 public void add treenode node else 隱藏的函式,add方法的具體實現 param parent bst樹 或者子樹 的根節點 param child 要插入b...
《資料結構與演算法 二叉查詢樹》
二叉查詢樹 binary search tree 也被稱作二叉搜尋樹。設x是二叉查詢樹中的任意乙個結點,則x的鍵值大於等於它的左子樹中任意乙個結點的鍵值,小於等於它的右子樹中任意乙個結點的鍵值。1 結點的前驅和後繼 結點的前驅 二叉樹中鍵值小於該結點的最大結點。結點的後繼 二叉樹中鍵值大於該結點的最...
資料結構與演算法 7 二叉查詢樹
一棵二叉查詢樹 bst 是一棵二叉樹,其中每個結點都含有乙個comparable的鍵 以及相關聯的值 且每個結點的鍵都大於其左子樹中的任意結點的鍵而小於右子樹的任意結點的鍵。和鍊錶一樣,我們巢狀定義了乙個私有類來表示二叉查詢樹上的乙個結點。每個結點都含有乙個鍵 乙個值 一條左鏈結 一條右鏈結和乙個結...