博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[leetCode] Recover Binary Search Tree
阅读量:6426 次
发布时间:2019-06-23

本文共 1656 字,大约阅读时间需要 5 分钟。

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?

 

confused what "{1,#,2,3}" means? 

 

Hide Tags
   
 
 

思路:

O(n) 空间的解法是,开一个指针数组,中序遍历,将节点指针依次存放到数组里,然后寻找两

处逆向的位置,先从前往后找第一个逆序的位置,然后从后往前找第二个逆序的位置,交换这两个
指针的值。
中序遍历一般需要用到栈,空间也是 O(n) 的,如何才能不使用栈?Morris 中序遍历。

 

方法一:中序遍历

class Solution {    public:        void recoverTree(TreeNode *root) {            vector
result; stack
st; TreeNode* p = root; // inorder traverse while(p != NULL || st.size() != 0) { while(p != NULL) { st.push(p); p = p->left; } if(!st.empty()) { p = st.top(); st.pop(); result.push_back(p); p = p->right; } } TreeNode* r1 = NULL, *r2 = NULL; for(int i = 0; i < result.size()-1; i++) { if(result[i]->val > result[i+1]->val) { r1 = result[i]; break; } } for(int i = result.size()-1; i >= 1; i--) { if(result[i]->val < result[i-1]->val) { r2 = result[i]; break; } } //swap r1 and r2's value int tmp = r1->val; r1->val = r2->val; r2->val = tmp; }};

 

转载地址:http://amyga.baihongyu.com/

你可能感兴趣的文章
mime
查看>>
SQL练习之求解填字游戏
查看>>
DOM
查看>>
UIApplication
查看>>
12:Web及MySQL服务异常监测案例
查看>>
数据库性能优化之冗余字段的作用
查看>>
DBA_实践指南系列9_Oracle Erp R12应用补丁AutoPatch/AutoControl/AutoConfig(案例)
查看>>
数据库设计三大范式
查看>>
ionic 字体的导入方法
查看>>
IP路由原理
查看>>
内部类详解
查看>>
洛谷P2726 阶乘 Factorials 数学
查看>>
类加载机制
查看>>
火柴棒等式(2008年NOIP全国联赛提高组)
查看>>
mongodb int型id 自增
查看>>
【转】关于大型网站技术演进的思考(十八)--网站静态化处理—反向代理(10)...
查看>>
Java中的4种代码块
查看>>
Ocelot(七)- 入门
查看>>
生成水杯热气
查看>>
程序员工作心法
查看>>