一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这棵二叉树不再是搜索二叉树,请找到这两个错误节点并返回他们的值。保证二叉树中结点的值各不相同。
给定一棵树的根结点,请返回两个调换了位置的值,其中小的值在前。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class FindErrorNode {
public:
void inorder(TreeNode* p,vector<int>&v)
{
if(p==NULL)
return;
inorder(p->left,v);
v.push_back(p->val);
inorder(p->right,v);
}
vector<int> findError(TreeNode* root) {
// write code here
vector<int> v,ans;
inorder(root,v);
int l=v.size(),cnt=0,a,b;
for(int i=1;i<l;i++)
{
if(v[i]<v[i-1])
{
cnt++;
if(cnt==1)
{
a=v[i-1]; b=v[i];
}
if(cnt==2)
{
b=v[i];
}
}
}
ans.push_back(a); ans.push_back(b);
sort(ans.begin(),ans.end());
return ans;
}
};