DFS
- 与二叉树相结合
- 与图相结合:时间复杂度为O(V+E)
Recover BST
void recoverTree(TreeNode* root){
TreeNode* first=NULL;
TreeNode* second=NULL;
TreeNode* pre=NULL;
TreeNode* node=root;
if(!node) return;
stack<TreeNode*> s;
while(node || !s.empty(){
if(node!=NULL){
s.push(node);
node=node->left;
}else{
node=s.top();
s.pop();
if(pre!=NULL){
if(node->val<pre->val){
if(first==NULL) first=pre;
if(first!=NULL) second=node;
}
}
pre=node;
node=node->right;
}
}
int tmp=first->