Recover Binary Search Tree
来源:互联网 发布:c语言运算符号优先级 编辑:程序博客网 时间:2024/05/21 11:33
题目:
Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
Note:A solution using O(n) space is pretty straight forward. Could you devise a constant space solution?
分析:先遍历一遍树的节点,用两个整数标记发生交换的节点;接着再遍历一遍树的节点,更改交换。
代码如下:
void changeTree(TreeNode *root,int &first,int &end)
{
if(root->left!=NULL)
{
changeTree(root->left,first,end);
}
if(root->val==first)
{
root->val=end;
}
else if(root->val==end)
{
root->val=first;
return;
}
if(root->right!=NULL)
{
changeTree(root->right,first,end);
}
return;
}
void getinvalidnode(TreeNode *root,int &first,int ¤t,int &end,bool &flag)
{
if(root->left!=NULL)
{
getinvalidnode(root->left,first,current,end,flag);
}
if(current==-1)
{
current=root->val;
}
else
{
if(root->val<current&&(!flag))
{
first=current;
end=root->val;
flag=true;
}
else if(root->val<current&&flag)
{
end=root->val;
return;
}
current=root->val;
}
if(root->right!=NULL)
{
getinvalidnode(root->right,first,current,end,flag);
}
return;
}
void recoverTree(TreeNode *root) {
if(root==NULL)return;
int first=-1,current=-1,end=-1;
bool flag=false;
getinvalidnode(root,first,current,end,flag);
if(first!=-1&&end!=-1)
changeTree(root,first,end);
return;
}
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- 【设计模式】迭代器
- #define XBYTE ((unsigned char volatile xdata *)
- linux下利用pipe函数实现类似 “cat a.txt | grep a”的管道命令
- 旋转卡壳——凸多边形矢量和
- android Launcher——启动过程详解
- Recover Binary Search Tree
- android Launcher——数据加载与变更
- 旋转卡壳——最薄横截带
- 各种系统架构图及其简介
- data,bdata,idata,pdata,xdata,code存储类型与存储区
- 集合系列--ArrayList实现详解
- C51中的reentrant
- 旋转卡壳——凸多边形间对踵点对(定义)
- DOM14---好友列表显示