Leetcode 之Binary Tree Postorder Traversal(47)
2024-08-27 17:34:16
中序遍历二叉搜索树,得到的是一个有序的结果,找出其中逆序的地方就可以了。如果逆序的地方相邻,只需把逆序的相换即可;如果不相邻,则需要找到第二个逆序对的
第二个元素再做交换。
定义两个指针p和q来指定需要交换的元素,指针pre记录当前结点的前驱结点,用来判断是否逆序。
void recoverTree(TreeNode *root)
{
pre = p = q = nullptr;
dfs(root);
swap(p->val, q->val);
}
void dfs(TreeNode *root)
{
if (!root)return;
dfs(root->left);
if (pre != nullptr && pre->val > root->val)
{
if (p == nullptr)
{
p = pre;
q = root;
}
else
q = root;
}
pre = root;
dfs(root->right);
}
最新文章
- QQ左侧滑动显示
- Web API应用架构在Winform混合框架中的应用(3)--Winfrom界面调用WebAPI的过程分解
- Ext.NET 4.1 系统框架的搭建(后台) 附源码
- Educational Codeforces Round 16 C
- Android之Handler用法总结
- T-SQL中的透视和逆透视
- Linux命令之hwclock - 查询和设置硬件时钟
- Unity3D Asset Server搭建 .
- Qt5 OpenGL框架
- 使用tensorflow搭建自己的验证码识别系统
- Window下通过SecureCRT的SSH2跳转到另一台Linux服务器
- 51nod--1212 最小生成树
- HTML 回顾整理
- Redis学习-常用命令
- SimpleDateFormat的parse(String str)方法的用法
- ubuntu + usb转RS232驱动
- CucumberPeople 1.3.2 发布
- python简说(二十八)json.path
- WebView之javascript与android交互基础加强
- 动态生成CheckBox(Winform程序)