Skip to content

Commit

Permalink
Update 99_Recover Binary Search Tree.cpp
Browse files Browse the repository at this point in the history
  • Loading branch information
veryordinary11 authored Mar 21, 2023
1 parent 04566d1 commit 8ded9b2
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions Binary Tree/99_Recover Binary Search Tree.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@ class Solution {
arr.push_back(root->val);
Preorder(root->left,arr);
Preorder(root->right,arr);
}
}//先序遍历

void Inorder(TreeNode* root, vector<int>& arr){
if(root == NULL) return;
Inorder(root->left, arr);
arr.push_back(root->val);
Inorder(root->right, arr);
}
}//中序遍历

TreeNode* buildTree_helper(vector<int>& preorder, int p_start, int p_end, vector<int>& inorder, int i_start, int i_end){
if(p_start>p_end || i_start>i_end) return NULL;
Expand All @@ -44,7 +44,7 @@ class Solution {
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
int length = preorder.size();
return buildTree_helper(preorder,0,length-1,inorder,0,length-1);
}
}//用中序遍历和先序遍历构建一棵树

void fix_preorder(vector<int>& preorder, vector<int>& inorder){
int err1 = 0;
Expand All @@ -59,7 +59,7 @@ class Solution {
}
}
swap_preorder(preorder, err1, err2);
}
}//把原本错位节点树的先序遍历改成正确BST树的先序遍历序列

void swap_preorder(vector<int>&preorder, int err1, int err2){
vector<int>::iterator it1 = std::find(preorder.begin(),preorder.end(),err1);
Expand All @@ -68,15 +68,16 @@ class Solution {
int idx2 = std::distance(preorder.begin(),it2);
preorder[idx1] = err2;
preorder[idx2] = err1;
}
}//辅助,在一个数组中找到两个值并将他们交换

void change_tree(TreeNode* root, TreeNode* sample){
if(root == NULL) return;

if(root->val != sample->val) root->val = sample->val;

change_tree(root->left,sample->left);
change_tree(root->right,sample->right);
}
}//把原树改成sample树

void recoverTree(TreeNode* root) {
Preorder(root,arr_preorder);
Expand Down

0 comments on commit 8ded9b2

Please sign in to comment.