演算法 恢復二叉搜尋樹

2021-10-12 15:12:44 字數 1265 閱讀 7847

1、題目描述

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

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

示例 1:

示例 2:

//顯示中序遍歷

func recovertree(root *treenode)

var inorder func(node *treenode)

inorder = func(node *treenode)

inorder(node.left)

inorder(node.right)

}inorder(root)

fmt.println(x, y)

recover(root, 2, x, y)

}//x取大數,y取小數

x, y := -1, -1

for i := 0; i < len(nums) - 1; i++ else }}

return x, y

}func recover(root *treenode, count, x, y int)

if root.val == x || root.val == y else

//記錄交換次數,要雙方都賦值才算交換完成

count--

if count == 0

}//遞迴

recover(root.right, count, x, y)

recover(root.left, count, x, y)

}//隱式中序遍歷

func recovertree(root *treenode)

var x, y, pred *treenode

for len(stack) > 0 || root != nil

//通過出棧實現中序遍歷

root = stack[len(stack)-1]

stack = stack[:len(stack)-1]

if pred != nil && root.val < pred.val else

}pred = root

root = root.right

}x.val, y.val = y.val, x.val

}

恢復二叉搜尋樹

題目 二叉搜尋樹中的兩個節點被錯誤地交換。請在不改變其結構的情況下,恢復這棵樹。示例 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...