***(leetcode) Recover Binary Search Tree
来源:互联网 发布:淘宝怎么看天猫积分 编辑:程序博客网 时间:2024/06/07 19:43
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? > read more on how binary tree is serialized on OJ.
1、空间复杂度是O(n) ,先中序遍历,根据中序遍历结果是升序,然后用插入排序对中序遍历节点的值排序
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution { void scan(TreeNode *root, vector<TreeNode *> &v){ if(NULL == root) return ; scan(root->left, v); v.push_back(root); scan(root->right, v); } public: void recoverTree(TreeNode *root) { vector<TreeNode *> v, recover; scan(root,v); int i , j, tmp; for(i=0;i<v.size()-1;i++) //基本有序,so用插入排序效率最高 for(j=i+1;j>0;j--) if(v[j]->val<v[j-1]->val){ tmp = v[j]->val; v[j]->val = v[j-1]->val; v[j-1]->val = tmp; } }};
2、 空间复杂度是常数,在中序遍历的时候,用pre表示当前节点的前一个节点,如果当前节点的值小于前面的值,则表示出错。 用mistake1 , mistake2表示出错的两个节点,如果两个节点不挨着,则第一个是pre节点放到mistake1, 第二处是root放到mistake2中。 注意如果遍历中只有一处不正常,则说明两个节点是挨着的,分别是pre 和root
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution { TreeNode *mistake1, *mistake2; TreeNode *pre; void scan(TreeNode *root){ if(NULL == root) return ; scan(root->left); if(NULL!=pre && root->val < pre->val){ if(NULL == mistake1){ mistake1 = pre; mistake2 = root; }else mistake2 = root; } pre = root; scan(root->right); } public: void recoverTree(TreeNode *root) { //pre=NULL; //可以不用初始化,但是要确保pre是NULL,进入递归 scan(root); int tmp = mistake1->val; mistake1->val = mistake2->val; mistake2->val = tmp; }};
0 0
- LeetCode: Recover Binary Search Tree
- LeetCode: Recover Binary Search Tree
- [Leetcode] Recover Binary Search Tree
- [LeetCode] Recover Binary Search Tree
- [Leetcode] Recover Binary Search Tree
- [leetcode] recover binary search tree
- LeetCode -- Recover Binary Search Tree
- [LeetCode]Recover Binary Search Tree
- [LeetCode] Recover Binary Search Tree
- LeetCode:Recover Binary Search Tree
- [Leetcode]Recover Binary Search Tree
- Leetcode: Recover Binary Search Tree
- LeetCode-Recover Binary Search Tree
- [leetcode] Recover Binary Search Tree
- [LeetCode] Recover Binary Search Tree
- 【Leetcode】Recover Binary Search Tree
- Leetcode Recover Binary Search Tree
- LeetCode | Recover Binary Search Tree
- 单路由器:一对多出口NAT技术+子接口NAT+(命名)扩展访问控制列表+多对一NAT技术实验
- c++实现atoi()和itoa()函数(字符串和整数转化)
- php学习笔记(十)对象和类
- Nodejs系列-1
- 关于自己的学习和工作
- ***(leetcode) Recover Binary Search Tree
- nginx源码分析--事件模块 & 琐碎
- ARM指令之--MVN
- 枋电OJ(HDOJ)2023题:求平均成绩(数组操作,水题)
- ContentProvider的使用指南
- PE文件格式详解
- Android——实现等格子的类似W8系统瓷砖效果的布局
- 教你摆脱低级程序员 项目中cocopads的安装使用
- 编写支持对其分配的malloc和free函数,分配内存时,malloc函数返回的地址必须能被2的n次方整除