Topic:
Elements of a binary search tree (BST) is 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?
Ideas:
Middle Sequence traversal
PackageBST; Public classRecoverbinarysearchtree {PrivateTreeNode prev =NULL; PrivateTreeNode Node1 =NULL; PrivateTreeNode Node2 =NULL; Public voidrecovertree (TreeNode root) {recovertreeinternal (root); Swap (Node1, node2); } Private voidrecovertreeinternal (TreeNode root) {if(Root = =NULL)return; Recovertreeinternal (Root.left); if(Prev! =NULL) { if(Prev.val >=root.val) {if(Node1 = =NULL) Node1=prev; Node2=Root; }} prev=Root; Recovertreeinternal (Root.right); } Private voidSwap (TreeNode node1, TreeNode node2) {if(Node1! =NULL&& Node2! =NULL) { intTMP =Node1.val; Node1.val=Node2.val; Node2.val=tmp; } } Public Static voidMain (string[] args) {//TODO auto-generated Method StubRecoverbinarysearchtree r =NewRecoverbinarysearchtree (); TreeNode Root=NewTreeNode (0); TreeNode Right=NewTreeNode (1); Root.left=Right ; R.recovertree (root); }}
Leetcode-recover Binary Search Tree