Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41039
  • 博文数量: 37
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 372
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-12 23:27
文章分类

全部博文(37)

文章存档

2014年(5)

2013年(32)

我的朋友

分类: C/C++

2013-12-22 18:03:49

中序遍历的话BST应该递增,那么在中序遍历过程中检查是否有节点违反这一规则即可。

点击(此处)折叠或打开

  1. /**
  2.  * Definition for binary tree
  3.  * struct TreeNode {
  4.  * int val;
  5.  * TreeNode *left;
  6.  * TreeNode *right;
  7.  * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8.  * };
  9.  */
  10. class Solution {
  11. public:
  12.     void errNodes(TreeNode *node, TreeNode *&prev, TreeNode **nodes) {
  13.         if(NULL==node) return;
  14.         errNodes(node->left, prev, nodes);
  15.         if(prev&&prev->val>node->val)
  16.         {
  17.             nodes[1]=node;
  18.             if(!nodes[0]) nodes[0]=prev;
  19.         }
  20.         prev=node;
  21.         errNodes(node->right,prev,nodes);
  22.     }
  23.     void recoverTree(TreeNode *root) {
  24.         if(NULL==root) return;
  25.         TreeNode *nodes[2]={0};
  26.         TreeNode *prev=NULL;
  27.         errNodes(root,prev,nodes);
  28.         if(nodes[0]&&nodes[1])
  29.             swap(nodes[0]->val,nodes[1]->val);
  30.     }
  31. };

阅读(489) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~