Recover Binary Search Tree
来源:互联网 发布:c语言编的小游戏 编辑:程序博客网 时间:2024/05/22 05:21
#include<iostream>#include<vector>using namespace std;struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(int val):val(val),left(NULL),right(NULL){};};class Solution{public: TreeNode *mistake1,*mistake2,* pre; void recoverTree(TreeNode *root) { TreeNode *Mis1=NULL, *Mis2=NULL; TreeNode *current,*pre, *parent=NULL; if(root == NULL) return; bool found = false; current = root; while(current != NULL) { if(current->left == NULL) { if(parent && parent->val > current->val) { if(!found) { Mis1 = parent; found = true; } Mis2 = current; } parent = current; current = current->right; } else { pre = current->left; while(pre->right != NULL && pre->right != current) pre = pre->right; if(pre->right == NULL) { pre->right = current; current = current->left; } else { pre->right = NULL; if(parent->val > current->val) { if(!found) { Mis1 = parent; found = true; } Mis2 = current; } parent = current; current = current->right; } } } display(root); cout<<endl; if(Mis1 && Mis2) swap(Mis1->val, Mis2->val); display(root); } void findmistake(TreeNode* root) { if(!root) return; findmistake(root->left); if(pre&&pre->val>root->val) { if(!mistake1) mistake1=pre; mistake2=root; } pre=root; findmistake(root->right); } void recover(TreeNode* root) { mistake1=mistake2=pre=NULL; findmistake(root); if(mistake1&&mistake2) swap(mistake1->val,mistake2->val); display(root); } void display(TreeNode* root) { if(!root) return; display(root->left); cout<<root->val<<' '; display(root->right); }};void main(){ TreeNode* node1=new TreeNode(6); TreeNode* node2=new TreeNode(2); TreeNode* node3=new TreeNode(4); TreeNode* node4=new TreeNode(1); TreeNode* node5=new TreeNode(3); TreeNode* node6=new TreeNode(5); TreeNode* node7=new TreeNode(7); node1->left=node2; node1->right=node3; node2->left=node4; node2->right=node5; node3->left=node6; node3->right=node7; // Solution solution; //solution.recoverTree(node1); //solution.recover(node1); Solution solution; solution.recover(node1);}
0 0
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- 实习第九天
- 黑马程序员--Java基础---GUI编程
- 使用 maskView 设计动画
- 深拷贝
- 用Unity3D和VuforiaSDK简单做AR应用(入门)
- Recover Binary Search Tree
- Concept阅读指引
- java2Word在Word文档指定位置插入图片或者文字
- 循环首次适应算法、首次适应算法、最佳适应算法_C语言版
- Android中Activity状态的保存和恢复:onSaveInstanceState和onRestoreInstanceState方法
- 开发者成功使用机器学习的十大诀窍
- Spring 注解学习——@ResponseBody,@RequestBody,@PathVariable
- Scala中链式调用
- POJ 3468