File tree 1 file changed +70
-0
lines changed
src/main/java/com/leetcode/trees
1 file changed +70
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * Definition for a binary tree node.
3
+ * public class TreeNode {
4
+ * int val;
5
+ * TreeNode left;
6
+ * TreeNode right;
7
+ * TreeNode(int x) { val = x; }
8
+ * }
9
+ */
10
+ class Solution {
11
+ public void recoverTree(TreeNode root) {
12
+
13
+ TreeNode temp1=null;
14
+ TreeNode temp2=null;
15
+ TreeNode prev=null;
16
+ TreeNode curr=root;
17
+
18
+ while(curr!=null){
19
+ if(curr.left==null){
20
+ if(prev!=null && prev.val>curr.val){
21
+ if(temp1==null){
22
+ temp1=prev;
23
+ temp2=curr;
24
+ }else{
25
+ temp2=curr;
26
+ }
27
+ }
28
+ prev=curr;
29
+ curr=curr.right;
30
+
31
+
32
+ }else{
33
+
34
+ TreeNode curr1=curr.left;
35
+ while(curr1.right!=null && curr1.right!=curr){
36
+ curr1=curr1.right;
37
+ }
38
+ if(curr1.right==null){
39
+ curr1.right=curr;
40
+ curr=curr.left;
41
+ }else{
42
+ if(prev!=null && prev.val>curr.val){
43
+ // System.out.println(prev.val+" --"+curr.val);
44
+ if(temp1==null){
45
+ temp1=prev;
46
+ temp2=curr;
47
+ }else{
48
+ temp2=curr;
49
+ }
50
+ }
51
+ curr1.right=null;
52
+ prev=curr;
53
+ curr=curr.right;
54
+ // System.out.println(prev.val+"**"+curr.val);
55
+
56
+ }
57
+
58
+ }
59
+
60
+ }
61
+ // System.out.println(temp1.val+"=="+temp2.val);
62
+ if(temp1==null){
63
+ return ;
64
+ }
65
+
66
+ int temp=temp1.val;
67
+ temp1.val=temp2.val;
68
+ temp2.val=temp;
69
+ }
70
+ }
You can’t perform that action at this time.
0 commit comments