|
4 | 4 | * and open the template in the editor.
|
5 | 5 | */
|
6 | 6 | package com.mycompany.avl;
|
7 |
| -import java. util. ArrayList; |
8 | 7 |
|
9 | 8 | /**
|
10 | 9 | *
|
11 | 10 | * @author asadp
|
12 | 11 | */
|
13 | 12 | public class AVL {
|
14 | 13 | Node root;
|
| 14 | + public AVL(){ |
| 15 | + this.root = null; |
| 16 | + } |
| 17 | + public AVL(Node root){ |
| 18 | + this.root = root; |
| 19 | + } |
15 | 20 | class Node{
|
16 | 21 | int item;
|
17 |
| - int balance = balance(); |
18 | 22 | Node left, right;
|
19 | 23 |
|
20 | 24 | public Node(int key){
|
@@ -52,6 +56,7 @@ void insert(int number){
|
52 | 56 | root = new Node(number);
|
53 | 57 | return;
|
54 | 58 | }
|
| 59 | + System.out.println("root item is " + root.item); |
55 | 60 | if(root.left == null && root.right == null){
|
56 | 61 | if(number < root.item){
|
57 | 62 | Node left = new Node(number);
|
@@ -99,88 +104,78 @@ void insert(int number){
|
99 | 104 | return;
|
100 | 105 | }
|
101 | 106 | }
|
102 |
| - if(root.balance == 0){ |
| 107 | + if(root.balance() == 0){ |
103 | 108 | if(number > root.item){
|
104 |
| - AVL a = new AVL(); |
105 |
| - a.root = root.right; |
| 109 | + AVL a = new AVL(root.right); |
106 | 110 | a.insert(number);
|
107 | 111 | return;
|
108 | 112 | }else {
|
109 |
| - AVL a = new AVL(); |
110 |
| - a.root = root.left; |
| 113 | + AVL a = new AVL(root.left); |
111 | 114 | a.insert(number);
|
| 115 | + return; |
112 | 116 | }
|
113 |
| - } else if(root.balance == -1){ |
| 117 | + } else if(root.balance() == -1){ |
114 | 118 | if(number < root.item){
|
115 |
| - AVL a = new AVL(); |
116 |
| - a.root = root.left; |
| 119 | + AVL a = new AVL(root.left); |
117 | 120 | a.insert(number);
|
| 121 | + return; |
118 | 122 | }else {
|
119 |
| - ArrayList<Node> nodes = new ArrayList(); |
120 |
| - nodes.add(root); |
121 |
| - Node end = root.right; |
122 |
| - nodes.add(end); |
123 |
| - while(end != null){ |
124 |
| - if(number < end.item){ |
125 |
| - end = end.left; |
126 |
| - }else{ |
127 |
| - end = end.right; |
128 |
| - } |
129 |
| - nodes.add(end); |
| 123 | + AVL ar = new AVL(root.right); |
| 124 | + int min = ar.min(); |
| 125 | + if(number < min){ |
| 126 | + AVL al = new AVL(root.left); |
| 127 | + al.insert(root.item); |
| 128 | + root.item = number; |
| 129 | + return; |
130 | 130 | }
|
131 |
| - AVL al = new AVL(); |
132 |
| - al.root = root.left; |
| 131 | + ar.delete(min); |
| 132 | + ar.insert(number); |
| 133 | + AVL al = new AVL(root.left); |
133 | 134 | al.insert(root.item);
|
134 |
| - Node first = root; |
135 |
| - for(Node node : nodes){ |
136 |
| - if(node == root){ |
137 |
| - continue; |
138 |
| - } |
139 |
| - if(node == null){ |
140 |
| - first.item = number; |
141 |
| - }else{ |
142 |
| - first.item = node.item; |
143 |
| - } |
144 |
| - first = node; |
145 |
| - } |
| 135 | + root.item = min; |
| 136 | + return; |
146 | 137 | }
|
147 |
| - //the case for root.balance == 1 |
| 138 | + //the case for root.balance() == 1 |
148 | 139 | }else {
|
149 | 140 | if(number > root.item){
|
150 |
| - AVL a = new AVL(); |
151 |
| - a.root = root.right; |
| 141 | + AVL a = new AVL(root.right); |
152 | 142 | a.insert(number);
|
| 143 | + return; |
153 | 144 | }else {
|
154 |
| - ArrayList<Node> nodes = new ArrayList(); |
155 |
| - nodes.add(root); |
156 |
| - Node end = root.left; |
157 |
| - nodes.add(end); |
158 |
| - while(end != null){ |
159 |
| - if(number < end.item){ |
160 |
| - end = end.left; |
161 |
| - }else{ |
162 |
| - end = end.right; |
163 |
| - } |
164 |
| - nodes.add(end); |
165 |
| - } |
166 |
| - AVL al = new AVL(); |
167 |
| - al.root = root.right; |
168 |
| - al.insert(root.item); |
169 |
| - Node first = root; |
170 |
| - for(Node node : nodes){ |
171 |
| - if(node == root){ |
172 |
| - continue; |
173 |
| - } |
174 |
| - if(node == null){ |
175 |
| - first.item = number; |
176 |
| - }else{ |
177 |
| - first.item = node.item; |
178 |
| - } |
179 |
| - first = node; |
| 145 | + AVL al = new AVL(root.left); |
| 146 | + int max = al.max(); |
| 147 | + if(number > max){ |
| 148 | + AVL ar = new AVL(root.right); |
| 149 | + ar.insert(root.item); |
| 150 | + root.item = number; |
| 151 | + return; |
180 | 152 | }
|
| 153 | + al.delete(max); |
| 154 | + al.insert(number); |
| 155 | + AVL ar = new AVL(root.right); |
| 156 | + ar.insert(root.item); |
| 157 | + root.item = max; |
| 158 | + return; |
181 | 159 | }
|
182 | 160 | }
|
183 | 161 | }
|
| 162 | + void delete(int number){ |
| 163 | + |
| 164 | + } |
| 165 | + int max(){ |
| 166 | + Node temp = root; |
| 167 | + while(temp.right != null){ |
| 168 | + temp = temp.right; |
| 169 | + } |
| 170 | + return temp.item; |
| 171 | + } |
| 172 | + int min(){ |
| 173 | + Node temp = root; |
| 174 | + while(temp.left != null){ |
| 175 | + temp = temp.left; |
| 176 | + } |
| 177 | + return temp.item; |
| 178 | + } |
184 | 179 | void preOrder(){
|
185 | 180 | if(root != null){
|
186 | 181 | System.out.print("item: " + root.item);
|
|
0 commit comments