三次過 691 恢復二叉搜尋樹

2021-09-22 10:00:05 字數 1146 閱讀 1302

在一棵二叉搜尋樹中, 只有兩個節點是被交換的. 找到這些節點並交換, 如果沒有節點被交換就返回原來的樹的根節點.

樣例1

輸入: 

輸出:

解釋:給出的二叉搜尋樹:

4/ \

5 2

/ \1 3

返回: 4

/ \2 5

/ \1 3

樣例2

輸入: 

輸出:

解釋:給出的二叉搜尋樹:

1/ \

2 5

/ \4 3

返回: 4

/ \2 5

/ \1 3

使用中序遍歷。設定三個節點分別用來標記遍歷的前乙個節點prenode,第乙個逆序節點firstnode,第二個逆序節點secondnode,那麼如果尋找逆序的兩個節點呢?

考慮中序遍歷為1, 5, 3, 4, 2。

如果prenode.val >= root.val,如節點5,3,則prenode節點即為firstnode節點,即節點5為firstnode。

如果firstnode存在 && prenode.val >= root.val,如節點4,2,則root節點即為secondnode節點,即節點2為secondnode。

這樣的考慮天然的處理了相鄰節點逆序的情況,例如3, 1, 4,firstnode為3,secondnode為1

/**

* definition of treenode:

* public class treenode

* }*/public class solution

return root;

}treenode prenode = new treenode(integer.min_value); //root的前乙個元素

treenode firstnode = null; //第乙個逆序節點

treenode secondnode = null; //第二個逆序節點

private void inorder(treenode root)

}

恢復二叉搜尋樹

題目 二叉搜尋樹中的兩個節點被錯誤地交換。請在不改變其結構的情況下,恢復這棵樹。示例 1 輸入 1,3,null,null,2 1 3 2輸出 3,1,null,null,2 3 1 2示例 2 輸入 3,1,4,null,null,2 3 1 4 2 輸出 2,1,4,null,null,3 2 ...

恢復二叉搜尋樹

二叉搜尋樹中序遍歷是乙個有序序列。交換其中兩個節點相當於在有序序列中交換了兩個數,我們只需找到這兩個數,把它們交換回來即可。有兩種情況 1.相鄰兩個數字交換 1,2,3,4,5,6 交換2,3變為 1,3,2,4,5,6 只有一組逆序對,中序遍歷記錄前驅,然後找到這兩數交換即可 2.不相鄰兩個數字交...

恢復二叉搜尋樹

在一棵二叉搜尋樹中,只有兩個節點是被交換的.找到這些節點並交換,如果沒有節點被交換就返回原來的樹的根節點.樣例1 輸入 輸出 解釋 給出的二叉搜尋樹 4 5 2 1 3 返回 4 2 5 1 3樣例2 輸入 輸出 解釋 給出的二叉搜尋樹 1 2 5 4 3 返回 4 2 5 1 3 definiti...