LeetCode | Recover Binary Search Tree(恢复二叉搜索树)
来源:互联网 发布:工业机器人编程语言co 编辑:程序博客网 时间:2024/06/04 19:15
wo 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?
题目解析:
做题要看问题的对象。这个题目是二叉搜索树的两个结点交换了,带来的结果是,中序遍历得到的不是有序的。很简单的方法是,设置一个n的数组,然后中序遍历,最后交换两个不符合规则的结点。
题目中要求使用常量空间,那么我们从上面的中序遍历中怎么得到启发呢?先看中序遍历后如何找到两个不符合规则的结点。比如:1-2-7-4-5-6-3-8。显然3要和7进行交换。那么怎么找到7,怎么找到3?从前向后遍历,当当前值比前一个值小的时候,前一个值要和后面的交换,再往后遍历,当当前值比前一个数小的时候,说明找到了第二个结点。然后将找到的两个结点交换。
有两个需要注意的地方:
1、两次查找的时候,都是当前值比前一个小的时候,但第一次取前一个值,第二个取后一个值。
2、如果需要交换的两个点正好相邻呢?所有当big被赋值的时候,small也要被赋值!
class Solution {public: void recoverTree(TreeNode *root) { if(root == NULL) return ; InOrderTraverse(root); } void InOrderTraverse(TreeNode *root){ stack<TreeNode *> S; TreeNode *p = root; vector<int> num; TreeNode *tmp = NULL; TreeNode *big = NULL; TreeNode *small = NULL; bool flag = false; while(p || !S.empty()){ if(p){ S.push(p); p = p->left; }else{ p = S.top(); S.pop(); if(tmp == NULL){ tmp = p; p = p->right; continue; } if(!flag){ if(tmp->val > p->val){ big = tmp; small = p; flag = true; } }else{ if(tmp->val > p->val){ small = p; break; } } tmp = p; p = p->right; } } int a = big->val; big->val = small->val; small->val = a; }};
0 0
- LeetCode | Recover Binary Search Tree(恢复二叉搜索树)
- Recover Binary Search Tree(恢复二叉搜索树)
- LeetCode OJ 之 Recover Binary Search Tree(恢复二叉搜索树)
- Leetcode 99. Recover Binary Search Tree 恢复二叉搜索树 解题报告
- LeetCode 99. Recover Binary Search Tree(修复二叉搜索树)
- lintcode--二叉搜索树交换节点(leetcode--Recover Binary Search Tree)
- leetcode 99. Recover Binary Search Tree BST二叉搜索树的两元素交换的恢复 + 中序遍历
- Recover Binary Search Tree 恢复二分搜索树
- leetCode 99.Recover Binary Search Tree(修正二叉搜索树) 解题思路和方法
- LeetCode-99-Recover Binary Search Tree 二叉树交换结点
- 【修正二叉树】Recover Binary Search Tree
- 二叉树-recover binary search tree
- leetcode---recover-binary-search-tree---树
- LeetCode(99) Recover Binary Search Tree
- (Leetcode 99) Recover Binary Search Tree(恢复二叉排序树BST)
- 二叉搜索树(binary search tree)
- 二叉搜索树(Binary Search Tree)
- Binary Search Tree(二叉搜索树)
- ASP.NET 之 防SQL注入篇
- 序列化机制
- T-SQL系列之所有数据库备份情况(MSSQL)
- shell文本处理——最基本方法压缩js文件
- redisCommand接口的用法--利用hiredis库获取MGET命令的结果的坑!
- LeetCode | Recover Binary Search Tree(恢复二叉搜索树)
- Employment Planning (HDU 1158)
- G610客户端模式(G610-A50-00)流程解析
- PHP文件缓存内容保存格式
- opencv 在picture control 上显示视频
- 在图形界面上显示文本信息2.1
- 两个有序数组求中位数
- android Activity切换动画设置方式总结
- 用户登录安全性的简单实例分析(Cookie、加密)