首先想到的是,中序遍历,然后把数组的内容再赋值给原来的树。
题目还给了一种问题,如果使用O(1)空间复杂度该怎么做。。。。这个没考虑出来
class Solution {
public:
int c;
void Inorder(TreeNode* root,vector<int> &r)
{
if(!root)return ;
Inorder(root->left,r);
r.push_back(root->val);
Inorder(root->right,r);
}
void Inorder_fuzhi(TreeNode* root,vector<int> r)
{
if(!root)return ;
Inorder_fuzhi(root->left,r);
root->val = r[c++];
Inorder_fuzhi(root->right,r);
}
void recoverTree(TreeNode* root) {
vector<int>res;
vector<int>::iterator ptr;
Inorder(root,res);
sort(res.begin(),res.end(),less<int>());
for(int i = 0;i<res.size();i++)
cout<<res[i]<<endl;
c = 0;
Inorder_fuzhi(root,res);
}
};

本文介绍了一种通过中序遍历方法来获取二叉树节点值,并将其排序后重新赋值给原树的方法。具体实现包括两次中序遍历:一次收集所有节点值并排序,另一次将排序后的值重新赋给树节点。
3352

被折叠的 条评论
为什么被折叠?



