class Solution {
public:
void inorder(TreeNode* root, vector<TreeNode*>& nodes) {
if (root == nullptr)
return;
inorder(root->left, nodes);
nodes.push_back(root);
inorder(root->right, nodes);
}
void recoverTree(TreeNode* root) {
vector<TreeNode*>nodes;
inorder(root,nodes);
int idx1=-1,idx2=-1;
for(int i=0;i<nodes.size()-1;++i){
if(nodes[i]->val>=nodes[i+1]->val){
if(idx1==-1) {
idx1=i;
idx2=i+1; //可能错误的是相邻节点
}
else idx2=i+1;
}
}
swap(nodes[idx1]->val,nodes[idx2]->val);
}
};
99. 恢复二叉搜索树
文章介绍了如何使用递归方法inorder遍历二叉树并将节点值进行调整,使得在中序遍历过程中,相邻节点值满足升序。recoverTree函数用于执行这个操作。
摘要由CSDN通过智能技术生成