恢復二叉搜尋樹

2021-10-04 08:23:45 字數 752 閱讀 5879

題目描述:

二叉搜尋樹中的兩個節點被錯誤地交換。

請在不改變其結構的情況下,恢復這棵樹。

參考**

判斷錯誤節點的方法是按照中序遍歷,選擇出值大小相反的節點。在遍歷時,記下錯誤的節點,若為相鄰節點,則輸出之後互換,若不相鄰,則記下第乙個節點處的前乙個節點(此時這個節點比當前節點大,是錯誤節點),第二個節點處為錯誤節點(比前乙個節點大),最後將這兩個互換,輸出。

/**

* definition for a binary tree node.

* struct treenode ;

*/int

midorder

(struct treenode *

*p,struct treenode *

*r1,

struct treenode *

*r2,

struct treenode *root)

else

//如果不是相鄰節點,是交換位置錯誤

}*p=root;

//設定前乙個節點if(

midorder

(p,r1,r2,root->right)==-

1)return-1

;//中序遍歷

return0;

}void

recovertree

(struct 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...