From 19be55fafa2548f6abbb531671d98253b641fd79 Mon Sep 17 00:00:00 2001 From: veryordinary11 Date: Tue, 21 Mar 2023 13:53:25 +0800 Subject: [PATCH] Update 99_Recover Binary Search Tree.cpp --- Binary Tree/99_Recover Binary Search Tree.cpp | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/Binary Tree/99_Recover Binary Search Tree.cpp b/Binary Tree/99_Recover Binary Search Tree.cpp index 2eff515..9ad2d92 100644 --- a/Binary Tree/99_Recover Binary Search Tree.cpp +++ b/Binary Tree/99_Recover Binary Search Tree.cpp @@ -88,3 +88,41 @@ class Solution { change_tree(root,sample_tree); } }; + +———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— + +/** + * Definition for a binary tree node. + * struct TreeNode { + * int val; + * TreeNode *left; + * TreeNode *right; + * TreeNode() : val(0), left(nullptr), right(nullptr) {} + * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} + * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} + * }; + */ +class Solution { +public: + + TreeNode* first = NULL; + TreeNode* second = NULL; + TreeNode* prev = new TreeNode(INT_MIN); + + void Inorder(TreeNode* root){ + if(root == NULL) return; + + Inorder(root->left); + + if(first == NULL && prev->val > root->val) first = prev; + if(first != NULL && prev->val > root->val) second = root; + prev = root; + + Inorder(root->right); + } + + void recoverTree(TreeNode* root) { + Inorder(root); + swap(first->val, second->val); + } +};