LeetCode---Recover Binary Search Tree
来源:互联网 发布:js foreach遍历数组 编辑:程序博客网 时间:2024/05/20 08:44
题目大意:给出一个交换了两个节点值的二叉搜索树,将其还原成正常的二叉搜索树。
算法思想:
可知,二叉搜索树进行中序遍历的结果为单调递增序列。
中序遍历二叉搜索树,将其遍历序列记录下来,对结果序列进行排序形成单调递增序列,然后再次经行中序遍历,遍历过程中将遍历的节点值和上述结果比较若不同则该节点值是被交换的,则将其修改为正常的值,知道遍历结束。
代码如下:
/** * 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) { if(root==NULL||(root->left==NULL&&root->right==NULL)) return ; vector<int> values; TreeNode* p=root; stack<TreeNode*> S; while(p!=NULL||!S.empty()){ while(p!=NULL){ S.push(p); p=p->left; } if(!S.empty()){ p=S.top(); S.pop(); values.push_back(p->val); p=p->right; } } sort(values.begin(),values.end()); p=root; int i=0; while(p!=NULL||!S.empty()){ while(p!=NULL){ S.push(p); p=p->left; } if(!S.empty()){ p=S.top(); S.pop(); if(values[i]!=p->val) { p->val=values[i]; } ++i; p=p->right; } } }};
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
- STM32启动文件详解
- hdu3535AreYouBusy【分组背包综合题】
- asp split 分割二维数组
- ASIHTTPRequest使用
- 14.2.1 MySQL and the ACID Model
- LeetCode---Recover Binary Search Tree
- 路遥知马力
- Android ViewTreeObserver
- URL格式解析
- css 随内容自适应
- 27 Quadratic primes - Project Euler
- CSS3 圆形loading效果
- cocos2d js的一些方法
- MySQL添加外键