二叉搜尋樹中的兩個節點被錯誤地交換。
請在不改變其結構的情況下,恢復這棵樹。
示例 1:
輸入: [1,3,null,null,2]
輸出: [3,1,null,null,2]
示例 2:
輸入: [3,1,4,null,null,2]
輸出: [2,1,4,null,null,3]
思路:遞迴,在二叉搜尋樹中找到出問題的兩個節點,交換即可。
/**
* definition for a binary tree node.
* struct treenode ;
*/void
recovertree
(struct treenode* root)
if(leftmax > root->val)
if(rightmin < root->val)
recovertree
(root->left)
;recovertree
(root->right)
;return;}
intmaxvaltree
(struct treenode* root)
intminvaltree
(struct treenode* root)
void
switchatreenode
(struct treenode* root,
int val,
int newval)
switchatreenode
(root->left,val,newval)
;switchatreenode
(root->right,val,newval)
;return
;}
Leetcode99 恢復二叉搜尋樹
第一次寫這個部落格以後我發現我理解錯了題目,但是我的問題更具有一般性,更複雜,所以文章就不改了 題目 只有兩個結點被錯誤的交換。我的 有任意多個結點被錯誤的交換。先分析題目 使用o n 空間複雜度的解法很容易實現,那麼我們先看看很容易實現是怎實現的。1 中序遍歷二叉樹,並將中序序列儲存在乙個陣列nu...
LeetCode 99 恢復二叉搜尋樹
3 1 2示例 2 輸入 3,1,4,null,null,2 3 1 4 2 輸出 2,1,4,null,null,3 2 1 4 3 高階 使用 o n 空間複雜度的解法很容易實現。你能想出乙個只使用常數空間的解決方案嗎?1.中序遍歷,儲存陣列 2.排序陣列 3.重新賦值,恢復二叉樹 includ...
LeetCode99 恢復二叉搜尋樹
二叉搜尋樹中的兩個節點被錯誤地交換。請在不改變其結構的情況下,恢復這棵樹。樹節點的定義 definition for a binary tree node.public class treenode treenode int val treenode int val,treenode left,tr...