題目:一顆二叉樹原本是搜尋二叉樹,但是其中有兩個節點調換了位置,使得這顆二叉樹不再是搜尋二叉樹,請找到兩個錯誤節點並返回。已知二叉樹中所有節點的值都不一樣,給定二叉樹的頭節點head,返回乙個長度為2的二叉樹節點型別的陣列errs,errs[0]表示乙個錯誤節點,errs[1]表示另乙個錯誤節點。
思路:尋找兩個錯誤節點的過程可以總結為:第乙個錯誤節點為第一次降序時較大的節點,第二個錯誤節點為最後一次降序時較小的節點
def gettwoerrnode(head):
errs = [none for i in range(2)]
if head == none:
return errs
stack =
pre = none
while len(stack)!=0 or head!=none:
if head!=none:
head = head.left
else:
head = stack.pop()
if pre !=none and pre.value > head.value:
if errs[0] == none:
errs[0] = pre
errs[1] = head
pre = head
head = head.right
return errs
高階問題:如果在原問題中得到了這兩個錯誤節點,我們當然可以通過交換兩個節點的節點值的方式讓整顆二叉樹重新稱為搜尋二叉樹。但現在要求你不能這麼做,而是在結構上完全交換兩個節點的位置。請實現調整的函式。 二叉樹問題 尋找搜尋二叉樹中兩個錯誤的節點
題目 一棵二叉樹原本是搜尋二叉樹,但是其中有兩個節點調換了位置,使得這棵二叉樹不再是搜尋二叉樹,請找出這兩個錯誤的節點並返回。已知二叉樹中所有節點的值都不一樣,給定二叉樹的頭節點,返回乙個長度為2的二叉樹節點型別的陣列errs。def gettwoerrornode root errs none f...
找到搜尋二叉樹中兩個錯誤的節點
找到搜尋二叉樹中兩個錯誤的節點 一棵二叉樹原本是搜尋二叉樹,但是其中有兩個節點調換了位置,使得這棵二叉樹不再是搜尋二叉樹,請按公升序輸出這兩個錯誤節點的值。每個節點的值各不相同 輸入描述 第一行輸入兩個整數 n 和 root,n 表示二叉樹的總節點個數,root 表示二叉樹的根節點。以下 n 行每行...
調整搜尋二叉樹中的兩個錯誤的節點
題目 找到搜尋二叉樹中兩個錯誤的節點 程式設計師 面試指南 第40題 p137 難度 尉 只看原問題,高階問題難度將,解答不可能看的懂 如果沒有錯誤節點,那麼搜尋二叉樹的中序遍歷的節點值是一直公升序的。如果有兩個節點位置錯了,就一定會出現降序。出現降序有2種情況 出現2次降序,第乙個錯誤的節點為第一...