99. Recover Binary Search Tree (Tree; DFS)
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?
class Solution { public:void recoverTree(TreeNode *root) {vals.clear();treeNodes.clear();inorderTraverse(root);sort(vals.begin(), vals.end());for (int i = 0; i < treeNodes.size(); ++i){treeNodes[i]->val = vals[i]; //只改变值,不改结构 }}void inorderTraverse(TreeNode* root){if (!root)return;inorderTraverse(root->left);vals.push_back(root->val);treeNodes.push_back(root);inorderTraverse(root->right); } private:vector<int> vals; vector<TreeNode*> treeNodes; };
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:void recoverTree(TreeNode* root) {TreeNode* pre = NULL;TreeNode* swap1 = NULL;TreeNode* swap2 = NULL;inOrderTraverse(root,pre,swap1,swap2);int tmp = swap1->val;swap1->val = swap2->val;swap2->val = tmp;}void inOrderTraverse(TreeNode* root, TreeNode* &pre,TreeNode* &swap1,TreeNode* &swap2){ //important to use &, otherwise new object will use a new address and the result won't bring back to caller//visit left childif(root->left) inOrderTraverse(root->left,pre,swap1,swap2);//visit rootif(pre && root->val < pre->val){swap2 = root;if(swap1==NULL) {swap1 = pre;}}pre = root;//visit right childif(root->right) inOrderTraverse(root->right,pre,swap1,swap2);} };
转载于:https://www.cnblogs.com/qionglouyuyu/p/4854218.html
99. Recover Binary Search Tree (Tree; DFS)相关推荐
- LeetCode 99. Recover Binary Search Tree
LeetCode 99. Recover Binary Search Tree 刚看到这个题真是一脸懵逼啊... 博客转载自:http://www.cnblogs.com/grandyang/p/42 ...
- 99. Recover Binary Search Tree(恢复二叉搜索树)
题目链接:https://leetcode.com/problems/recover-binary-search-tree/ 思路: 看到二叉搜索树时,我想到的是中序遍历符合从大到小的原则. 然后根据 ...
- 99. Recover Binary Search Tree 恢复二叉搜索树
二叉搜索树中的两个节点被错误地交换. 请在不改变其结构的情况下,恢复这棵树. 示例 1: 输入: [1,3,null,null,2] 1/3\2 输出: [3,1,null,null,2] 3/1\2 ...
- 第五周 Leetcode 99. Recover Binary Search Tree (HARD)
Leetcode99 给定一个 二叉搜索树,其中两个节点被交换,写一个程序恢复这颗BST. 只想到了时间复杂度O(n)空间复杂度O(h) h为树高的解法,还没想到空间O(1)的解法. 交换的情况只有两 ...
- 99. Recover Binary Search Tree
一.题目 1.审题 2.分析 给出一个二叉查找树,其中有两个元素的位置弄错了,写算法将其恢复. 二.解答 1.思路: 方法一. 通过中序遍历可以确定一棵二叉查找树由小到大的顺序. 所以在此错位的查找树 ...
- [leetcode] Recover Binary Search Tree
Recover Binary Search Tree Two elements of a binary search tree (BST) are swapped by mistake. Recove ...
- Recover Binary Search Tree
Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...
- Recover Binary Search Tree,恢复二叉排序树
问题描述:题意就是二叉树中有两个节点交换了,恢复结构. Two elements of a binary search tree (BST) are swapped by mistake. Recov ...
- LeetCode OJ - Recover Binary Search Tree
题目: Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without chan ...
最新文章
- pyrosim有Linux版本吗,烟气流动分析软件Pyrosim版本 2020.4.092
- nginx注册为windows系统服务
- 创建css的时候选择器有哪几类,CSS3-CSS的选择器共有几类?
- WebBrowser,挖坑,跳坑,填坑
- win7驱动程序未经签名可以使用吗_手把手教你解决win7系统驱动程序签名强制禁用的设置技巧...
- 英特尔成立集成光电研究中心 加速光互连I/O创新
- ubuntu一键安装LAMP 及一键卸载
- [iphone-Game]物理引擎-资源整理贴 (3.14 更新)
- 得洲奥斯汀研究生计算机专业排名,德克萨斯大学奥斯汀分校有计算机工程专业排名...
- 浅尝辄止_数学建模(笔记_系统(层次)聚类算法及其SPSS实现)
- A. Neko Finds Grapes-奇偶的性质及运用-Codeforces Round #554 (Div. 2)
- Pycharm2018.2永久破解
- 怀旧服为什么显示服务器不兼容,《魔兽世界怀旧服》加载出错怎么办 加载出错解决方案...
- 武汉新时标文化传媒有限公司喜欢看短视频而不是文章?
- 使用JavaScript实现GPA计算器(学科实践任务 一)
- Springboot+thymeleaf实现excel文件上传+后台数据搜索
- Android移动游戏之崛起
- 如何在原生Android项目里嵌入Cordova
- 怎么样运行/调试你的PHP代码
- 天才程序员:我不是一个好的示范
热门文章
- 当下网络营销市场中为何企业可通过网络营销提升自我价值?
- 浅析企业开展网站建设具有哪些实际意义?
- 网站在改版时如何降低对排名的影响呢?
- c语言怎么让他变成程序,用C语言编了个程序,怎样让它点击“下一步”后继续弹出窗口...
- 完整计算机组成系统,计算机组成原理与完整系统结构.doc
- mysql ES 同步中间件
- python hmac
- CSS三栏布局的四种方法
- 腾讯的模板引擎---artTemplate
- hibernate映射(单向双向的一对多、多对一以及一对一、多对一(转)