题目:
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;
}
题目:
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree {3,9,20,#,#,15,7},
3 / \ 9 20 / \ 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]
代码如下:
void getleverorder(TreeNode *root,vector<vector<int> > &getnode,int i)
{
if(root!=NULL)
{
if(i>getnode.size())
{
vector<int> tmp;
tmp.push_back(root->val);
getnode.push_back(tmp);
}
else
{
getnode[i-1].push_back(root->val);
}
getleverorder(root->left,getnode,i+1);
getleverorder(root->right,getnode,i+1);
}
return;
}
vector<vector<int> > levelOrder(TreeNode *root) {
vector<vector<int> > getnode;
int i=1;
getleverorder(root,getnode,i);
return getnode;
}
1.卸载你当前机器中的Adobe Flash Player,安装11.2.202.235版本。(高版本的Flash在使用iWisoft Flash SWF to Video Converter转换后的视频会没有声音)
当你将高版本卸载后,再安装低版本时,会出现这种情况,在安装flash player 时遇到提示“正尝试安装的adobe flash player不是最新版本。请访问http://www.adobe.com/go/getflashplayer 以获取最新、最安全的版本。” 解决方法: “开始”-“运行”-执行“regedit”,即打开注册表,找到以下位置:[HKEY_LOCAL_MACHINE\SOFTWARE\Macromedia\FlashPlayer\SafeVersions] 将“SafeVersions”右侧所有子项中“名称”列数值比你现在想安装的Flash Player 版本的数值大的项删除!即是将“SafeVersions”右侧所有子项中“名称”列高于你当前安装版本的项删掉即可。 例如你想安装10.0版本的,就把10.0及大于10.0的项删除,。然后重新安装 Flash Player,就可以完成安装了, 如果还不行的话 ,请先安装系统补丁KB923789 然后在用上述方法。
2.安装iWisoft Flash SWF to Video Converter(此版本的软件是已授权的,所以转换后的视频没有水印)
tips:以上操作所需软件免积分下载地址: http://download.csdn.net/detail/zanychou/5490415