前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LeetCode 99. Recover Binary Search Tree(BST,中序遍历)

LeetCode 99. Recover Binary Search Tree(BST,中序遍历)

作者头像
ShenduCC
发布2020-02-14 12:00:33
发布2020-02-14 12:00:33
69900
代码可运行
举报
文章被收录于专栏:算法修养算法修养
运行总次数:0
代码可运行

题意:给你一个BST,其中任意两个元素被交换过了,让你把交换的元素复原。

题解:BST的中序遍历是个有序的数组,那么两个元素被交换了,我们可以for循环一次找出这两个数字。从小到大遍历,维护一个值max,表示当前遍历元素的最大值。由于两个元素被交换了,所以max一定有一段时间是不变的,直到遇到一个比max大的元素,那么max就应该和这个最大的元素之前一个元素交换过来。当然如果遍历结束了还没有比max大的,那么max就是最大的,所以交换最后一个元素就可以了。

以上操作可以在中序遍历的过程中完成。

代码语言:javascript
代码运行次数:0
运行
复制
c++
 ```
 /**
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:
 TreeNode* last;
 TreeNode* pre;
 int tag=0;
 int ans=0;
 int m = -123987523;
 void recoverTree(TreeNode* root) {
  if(root==NULL)      return;   last = new TreeNode(m);   fun(root);   if(ans==0)  {      int temp = pre->val;      pre->val = last->val;      last->val = temp;  }
 }
 void fun(TreeNode* root)
 {
 if(root->left!=NULL)
 {
 fun(root->left);
 }
  if(last->val == m )  {      last=root;  }  else if(last->val<root->val)  {      if(tag==1)      {          int temp = pre->val;          pre->val = last->val;          last->val = temp;          ans=1;      }      last=root;      tag=0;  }  else  {      tag=1;  }   pre=root;   if(root->right!=NULL)  {      fun(root->right);  }
 }
 };
 ```
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-01-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档