Recover Binary Search Tree
2016-08-03 22:42
417 查看
Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
算法:中序遍历二叉树,如果后边的数边前边的小,则说明出错了。如果没有找到第二个结点说明是相邻位置出错了。
Recover the tree without changing its structure.
算法:中序遍历二叉树,如果后边的数边前边的小,则说明出错了。如果没有找到第二个结点说明是相邻位置出错了。
class Solution { public: bool flag; //记录p1的next TreeNode* p1; TreeNode* p2; TreeNode* next; //算法:中序遍历找到当前值比前一个值小的结点。找到的两个结点就是不合法的结点 void recoverTree(TreeNode *root) { if(root == NULL) return ; TreeNode* pre = new TreeNode(INT_MIN); //找到第一个值 flag = true; helper(root,pre); if(flag){ int tmp = p1->val; p1->val = p2->val; p2->val = tmp; } //如果没有找到P2,说明错误出现在中序遍历的相邻位置 else{ if(next == NULL) next = pre; int tmp = next ->val; next->val = p1->val; p1->val = tmp; } } void helper(TreeNode*& root ,TreeNode*& pre){ if(root == NULL) return; //左子树 helper(root->left,pre); //根结点处理 int key = root->val; //找到出错点 if(key < pre->val){ if(flag){ //第一个值出错,指针指向前一个 p1 = pre; //记录中序遍历的下一个相邻结点 next = root; flag = !flag; } else{ p2 = root; flag = !flag; } } //更新pre pre = root; //右子树 helper(root->right,pre); } };
相关文章推荐
- Recover Binary Search Tree
- 【LeetCode 99】Recover Binary Search Tree
- Recover Binary Search Tree
- leetcode - Recover Binary Search Tree
- LeetCode "Recover Binary Search Tree"
- leetcode-Recover Binary Search Tree
- LeetCode--Recover Binary Search Tree
- 算法分析与设计——LeetCode Problem.99 Recover Binary Search Tree
- 【LeetCode】 Recover Binary Search Tree BST 中序遍历
- [leetcode] recover binary search tree
- Recover Binary Search Tree
- 【修正二叉树】Recover Binary Search Tree
- Recover Binary Search Tree
- leetcode:Recover Binary Search Tree
- [Leetcode] Recover Binary Search Tree
- leetcode:Recover Binary Search Tree
- LC99 Recover Binary Search Tree
- Recover Binary Search Tree
- LeetCode Recover Binary Search Tree