package com.aaront.execrise.generic; import com.aaront.exercise.generic.GenericBinaryTree; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import java.util.Arrays; import java.util.List; /** * @author tonyhui * @since 17/2/20 */ public class GenericBinaryTreeTest { @Before public void init() { String[] datas = new String[]{"9", "4", "5", "7", "1", "2", "3", "10", "17", "9" }; GenericBinaryTree<String> binaryTree = new GenericBinaryTree<>(); for (String data : datas) { binaryTree.add(data); } } @Test public void testAdd() { String[] datas = new String[]{"9", "4", "5", "7", "1", "2", "3", "10", "17", "9" }; GenericBinaryTree<String> binaryTree = new GenericBinaryTree<>(); for (String data : datas) { binaryTree.add(data); } List<String> preorderWithoutRecursionDatas = binaryTree.traversalWithoutRecursion(GenericBinaryTree.PREORDER); Assert.assertEquals(Arrays.asList(new String[]{"9", "4", "1", "2", "10", "17", "3", "5", "7", "9" }), preorderWithoutRecursionDatas); List<String> inorderWithoutRecursionDatas = binaryTree.traversalWithoutRecursion(GenericBinaryTree.INORDER); Assert.assertEquals(Arrays.asList(new String[]{"1", "10", "17", "2", "3", "4", "5", "7", "9", "9" }), inorderWithoutRecursionDatas); List<String> postorderWithoutRecursionDatas = binaryTree.traversalWithoutRecursion(GenericBinaryTree.POSTORDER); Assert.assertEquals(Arrays.asList(new String[]{"17", "10", "3", "2", "1", "7", "5", "4", "9", "9" }), postorderWithoutRecursionDatas); String[] preorderDatas = binaryTree.traversal(GenericBinaryTree.PREORDER, new String[0]); Assert.assertArrayEquals(new String[]{"9", "4", "1", "2", "10", "17", "3", "5", "7", "9" }, preorderDatas); String[] inorderDatas = binaryTree.traversal(GenericBinaryTree.INORDER, new String[0]); Assert.assertArrayEquals(new String[]{"1", "10", "17", "2", "3", "4", "5", "7", "9", "9" }, inorderDatas); String[] postorderDatas = binaryTree.traversal(GenericBinaryTree.POSTORDER, new String[0]); Assert.assertArrayEquals(new String[]{"17", "10", "3", "2", "1", "7", "5", "4", "9", "9" }, postorderDatas); String[] hierarchicalDatas = binaryTree.traversal(GenericBinaryTree.HIERARCHICAL, new String[0]); Assert.assertArrayEquals(new String[]{"9", "4", "9", "1", "5", "2", "7", "10", "3", "17" }, hierarchicalDatas); } @Test public void testDelete() { GenericBinaryTree<Integer> binaryTree = buildTree(new int[]{50, 25, 12, 11, 40, 14, 35, 45, 44, 43, 42, 75, 55, 70, 60, 65, 63, 61, 90, 80, 85, 82, 88}); // 删除叶子节点 binaryTree.delete(11); Object[] preOrderDatas = binaryTree.traversal(); Assert.assertArrayEquals(new Object[]{50, 25, 12, 14, 40, 35, 45, 44, 43, 42, 75, 55, 70, 60, 65, 63, 61, 90, 80, 85, 82, 88}, preOrderDatas); binaryTree.delete(88); preOrderDatas = binaryTree.traversal(); Assert.assertArrayEquals(new Object[]{50, 25, 12, 14, 40, 35, 45, 44, 43, 42, 75, 55, 70, 60, 65, 63, 61, 90, 80, 85, 82}, preOrderDatas); // 删除一个子节点的节点 binaryTree.delete(70); preOrderDatas = binaryTree.traversal(); Assert.assertArrayEquals(new Object[]{50, 25, 12, 14, 40, 35, 45, 44, 43, 42, 75, 55, 60, 65, 63, 61, 90, 80, 85, 82}, preOrderDatas); binaryTree.delete(80); preOrderDatas = binaryTree.traversal(); Assert.assertArrayEquals(new Object[]{50, 25, 12, 14, 40, 35, 45, 44, 43, 42, 75, 55, 60, 65, 63, 61, 90, 85, 82}, preOrderDatas); // 删除两个子节点的节点 binaryTree.delete(40); preOrderDatas = binaryTree.traversal(); Assert.assertArrayEquals(new Object[]{50, 25, 12, 14, 42, 35, 45, 44, 43, 75, 55, 60, 65, 63, 61, 90, 85, 82}, preOrderDatas); binaryTree.delete(50); preOrderDatas = binaryTree.traversal(); Assert.assertArrayEquals(new Object[]{55, 25, 12, 14, 42, 35, 45, 44, 43, 75, 60, 65, 63, 61, 90, 85, 82}, preOrderDatas); } private GenericBinaryTree<Integer> buildTree(int[] datas) { GenericBinaryTree<Integer> binaryTree = new GenericBinaryTree<>(); for (int data : datas) { binaryTree.add(data); } return binaryTree; } }