[LeetCode] 99. Recover Binary Search Tree

来源:互联网 发布:mac怎么同时看两个页面 编辑:程序博客网 时间:2024/05/17 08:06

思路:
依然是in-order遍历. 思路和上一题很相似, 这次要用到三个全局变量, prev记录in-order排序后的前一个结点, first是第一个不正常节点, 它存的值比后面数字大, second是第二个不正常节点, 它的值比前一个值小, 然后全部遍历后调换两个节点的值即可.

void helper(TreeNode* root, TreeNode*& prev, TreeNode*& first, TreeNode*& second) {    if (! root) return;    helper(root->left, prev, first, second);    if (! first && (! prev || root->val <= prev->val))        first = prev;    if (first && root->val <= prev->val)        second = root;    prev = root;    helper(root->right, prev, first, second);}void recoverTree(TreeNode* root) {    TreeNode* prev = NULL, *first = NULL, *second = NULL;    helper(root, prev, first, second);    swap(first->val, second->val);}
0 0
原创粉丝点击