做這題的時(shí)候發(fā)現(xiàn)其實(shí)上一題的做法是錯(cuò)誤的,BST的中序排序是一個(gè)上升序列,所以判斷的時(shí)候只需要按中序排序, 然后判斷是不是上升的就ok!所以98也是這樣做的!!! 至于這題,為什么n1 和 n2 記錄的不一樣呢? N1 是記錄PRe的而n2是記錄root的 因?yàn)槟阍诩埳蠈懸粋€(gè)上升序列,然后換磚兩個(gè)數(shù),你就會(huì)發(fā)現(xiàn)原因!!!
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: int num; TreeNode* n1; TreeNode* n2; TreeNode* pre = new TreeNode(INT_MIN); //int pre; void change(TreeNode* root){ if(root == NULL) return ; change(root -> left); if(num == 0 && pre -> val >= root -> val){ num ++; n1 = pre; } if(num != 0 && pre -> val >= root -> val) n2 = root; pre = root; change(root -> right); } void recoverTree(TreeNode* root) { if(root == NULL) return ; num = 0; change(root); int t; t = n1 -> val; n1 -> val = n2 -> val; n2 -> val = t; }};新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注