簡體   English   中英

在二叉搜索樹中查找交換節點

[英]Find the swapped nodes in binary search tree

二進制搜索樹的兩個節點被交換。

輸入樹:

     10
    /  \
   5    8
  / \
 2   20

在上面的樹中,必須交換節點20和8以固定樹。

輸出樹:

     10
    /  \
   5    20
  / \
 2   8

我按照這里給出的解決方案。 但我覺得解決方案不正確,因為:

根據網站:

  1. 交換節點在BST的順序遍歷中不相鄰。

    例如,節點5和25在{3 5 7 8 10 15 20 25}中交換。
    給定樹的順序遍歷是3 25 7 8 10 15 20 5如果我們仔細觀察,在順序遍歷期間,我們發現節點7小於先前的訪問節點25.這里保存節點25(上一節點)的上下文。 同樣,我們發現節點5小於前一節點20.這次,我們保存節點5(當前節點)的上下文。 最后交換兩個節點的值。

所以我的觀點是,如果它考慮25因為它大於7而不應該考慮20因為它也大於5.所以這是正確的解決方案還是我遺漏了什么?

是。 這是考慮到25,因為它是大於7。但是,這應該考慮20以及因為它也大於5。相反,它應該考慮5,因為它是小於20。

這個例子不是很好,因為原始數組中5的位置是最后一個。 讓我們考慮一個排序的數組{1, 2, 3, 4, 5} 交換2和4,然后我們得到{1, 4, 3, 2, 5} 如果交換排序數組中的兩個元素(不相鄰),對於所有對(A[i], A[i+1]) ,將會有兩對錯誤順序,即降序。 {1, 4, 3, 2, 5} ,我們有對(4, 3)和對(3, 2) 假設我們有對(A[p], A[p+1])和對(A[q], A[q+1]) ,使得A[p] > A[p+1]A[q] > A[q+1] ,我們可以聲稱它是A[p]A[q+1]被交換。 {1, 4, 3, 2, 5}的情況下,交換4和2。

現在回到例子3 25 7 8 10 15 20 5 ,其中25, 720 5是錯誤順序的唯一兩對。 然后25和5是被交換的兩個元素。

關注@jeffreys的表示法,

如果我們有對(A [p],A [p + 1])和對(A [q],A [q + 1]),那么A [p]> A [p + 1]和A [q ]> A [q + 1],我們可以聲稱它是A [p]和A [q + 1]被交換

您知道只有一次交換,這會在排序順序中產生2個差異,或者如果它們相鄰則只產生一個差異。 假設p <q,所以A [p],A [p + 1]是第一個下降對,q是第二個。

  • 如果沒有第二對夫婦,那么交換第一對夫婦就可以修復這棵樹,這很容易。 否則我們知道有兩個非相鄰節點。

  • 在A [p]和A [p + 1]之外,讓我們說A [p + 1]是不合適的。 由於這是第一對夫婦,我們必須將A [p + 1]向前移動到第二對夫婦,但這意味着它仍然會比原來的A [p]小,所以我們不會創建一個排序的數組。 因此,我們必須選擇A [p]。

  • 同樣適用於A [q]和A [q + 1],假設A [q]不合適,這意味着我們必須向后移動它,它仍然會大於A [q + 1]出現在后面,再次打破排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM