Implement clone and invert
This commit is contained in:
		
							parent
							
								
									b68ff6c72e
								
							
						
					
					
						commit
						3b6c546cd4
					
				
					 3 changed files with 46 additions and 4 deletions
				
			
		|  | @ -43,7 +43,7 @@ public interface OrderedTreeProcessor<V, T> { | ||||||
| 
 | 
 | ||||||
|     T leftmostNodeInRightSubtree(T t); |     T leftmostNodeInRightSubtree(T t); | ||||||
| 
 | 
 | ||||||
|     T invert(T t); |     void invert(T t); | ||||||
| 
 | 
 | ||||||
|     T clone(T t); |     T clone(T t); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -300,13 +300,31 @@ public class RecursiveOrderedBinaryTreeNodeProcessor<V> extends OrderedBinaryTre | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     public BinaryTreeNode<V> invert(BinaryTreeNode<V> tree) { |     public void invert(BinaryTreeNode<V> tree) { | ||||||
|         return null; |         if (tree == null) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         invert(tree.left); | ||||||
|  |         invert(tree.right); | ||||||
|  | 
 | ||||||
|  |         var t = tree.left; | ||||||
|  |         tree.left = tree.right; | ||||||
|  |         tree.right = t; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     public BinaryTreeNode<V> clone(BinaryTreeNode<V> tree) { |     public BinaryTreeNode<V> clone(BinaryTreeNode<V> tree) { | ||||||
|         return null; |         if (tree == null) { | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         var t = new BinaryTreeNode<V>(); | ||||||
|  |         t.left = clone(tree.left); | ||||||
|  |         t.right = clone(tree.right); | ||||||
|  |         t.key = tree.key; | ||||||
|  | 
 | ||||||
|  |         return t; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|  |  | ||||||
|  | @ -243,4 +243,28 @@ public abstract class OrderedTreeProcessorTest<T> { | ||||||
|             assertIterableEquals(list, processor.iterate(t)); |             assertIterableEquals(list, processor.iterate(t)); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     @ParameterizedTest | ||||||
|  |     @ArgumentsSource(ListProvider.class) | ||||||
|  |     void testThat_invertWorks(List<Integer> list) { | ||||||
|  |         T t = asTree(list); | ||||||
|  |         processor.invert(t); | ||||||
|  | 
 | ||||||
|  |         var cmp = CMP.reversed(); | ||||||
|  | 
 | ||||||
|  |         assertTrue(processor.check(t, cmp)); | ||||||
|  |         list.sort(cmp); | ||||||
|  |         assertIterableEquals(list, processor.iterate(t)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @ParameterizedTest | ||||||
|  |     @ArgumentsSource(ListProvider.class) | ||||||
|  |     void testThat_cloneWorks(List<Integer> list) { | ||||||
|  |         T t = asTree(list); | ||||||
|  |         t = processor.clone(t); | ||||||
|  | 
 | ||||||
|  |         assertTrue(processor.check(t, CMP)); | ||||||
|  |         list.sort(CMP); | ||||||
|  |         assertIterableEquals(list, processor.iterate(t)); | ||||||
|  |     } | ||||||
| } | } | ||||||
		Reference in a new issue