二叉查找树 java代码实现
生活随笔
收集整理的這篇文章主要介紹了
二叉查找树 java代码实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 代碼實現
- 節點實現類
- 二叉樹實現
- 單元測試
代碼實現
節點實現類
package csdn.dreamzuora.tree;/*** Title:* Description:** @version 1.0* @author: weijie* @date: 2020/10/19 13:30*/ public interface Node { } package csdn.dreamzuora.tree;import java.io.Serializable;/*** Title:* Description:** @version 1.0* @author: weijie* @date: 2020/10/19 13:27*/ public abstract class AbstractNode<T, E> implements Node, Serializable {private static final long serialVersionUID = -2321782309212147194L;/*** 數據域*/T data;/*** 左孩子*/E left;/*** 右孩子*/E right;public AbstractNode() {}public AbstractNode(T data) {this.data = data;}public T getData() {return data;}public void setData(T data) {this.data = data;}public E getLeft() {return left;}public void setLeft(E left) {this.left = left;}public E getRight() {return right;}public void setRight(E right) {this.right = right;} } package csdn.dreamzuora.tree; /*** Title: 二叉樹節點* Description:** @version 1.0* @author: weijie* @date: 2020/10/19 13:27*/ public class BinaryNode extends AbstractNode<Integer, BinaryNode>{public BinaryNode(Integer data) {super(data);} }二叉樹實現
package csdn.dreamzuora.tree;import java.util.List;/*** Title: 樹接口* Description:** @version 1.0* @author: weijie* @date: 2020/10/16 14:56*/ public interface Tree<T,E> {/*** 構建樹* @param dataList*/void createTree(List<T> dataList);/*** 添加節點* @param data*/E addNode(E tree, T data);/*** 刪除節點* @param tree* @param node*/void deleteNode(E tree, E node);/*** 前序遍歷:根節點->左節點->右節點*/void preOrder(List<T> list, E node);/*** 中序遍歷:左節點->根節點->右節點* @return*/void inOrder(List<T> list, E node);/*** 后序遍歷:左節點->右節點->根節點*/void laOrder(List<T> list, E node);/*** 廣度優先遍歷:層序遍歷* @param list* @param node*/void bfs(List<T> list, E node);} package csdn.dreamzuora.tree;import java.io.Serializable; import java.util.List;/*** Title: 二叉樹抽象類* Description:** @version 1.0* @author: weijie* @date: 2020/10/16 14:57*/ public abstract class AbstractTree<T, E> implements Tree<T, E>, Serializable {private static final long serialVersionUID = -8046156919125106629L;/*** 根節點*/E root;@Overridepublic void createTree(List<T> dataList) {for (T data : dataList){root = addNode(root, data);}}} package csdn.dreamzuora.tree;import java.util.LinkedList; import java.util.List;/*** Title: 二叉樹查找樹* Description:** @version 1.0* @author: weijie* @date: 2020/10/16 14:54*/ public class BinaryTree extends AbstractTree<Integer, BinaryNode>{@Overridepublic BinaryNode addNode(BinaryNode node, Integer data) {if (node == null){return new BinaryNode(data);}if (node.data > data){node.left = addNode(node.left, data);}else if (node.data < data){node.right = addNode(node.right, data);}else {node.data = data;}return node;}@Overridepublic void deleteNode(BinaryNode tree, BinaryNode node) {}@Overridepublic void preOrder(List<Integer> list, BinaryNode node) {if (node == null){return;}list.add(node.data);preOrder(list, node.left);preOrder(list, node.right);}@Overridepublic void inOrder(List<Integer> list, BinaryNode node) {if (node == null){return;}inOrder(list, node.left);list.add(node.data);inOrder(list, node.right);}@Overridepublic void laOrder(List<Integer> list, BinaryNode node) {if (node == null){return;}laOrder(list, node.left);laOrder(list, node.right);list.add(node.data);}@Overridepublic void bfs(List<Integer> list, BinaryNode node) {if (node == null){return;}LinkedList<BinaryNode> queue = new LinkedList<>();queue.offer(node);while (!queue.isEmpty()){BinaryNode child = queue.poll();list.add(child.data);if (child.left != null){queue.offer(child.left);}if (child.right != null){queue.offer(child.right);}}} }單元測試
package csdn.dreamzuora.tree;import org.junit.Before; import org.junit.Test; import org.junit.jupiter.api.Assertions;import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List;import static org.junit.Assert.*;/*** Title:* Description:** @version 1.0* @author: weijie* @date: 2020/10/19 14:47*/ public class BinaryTreeTest {BinaryTree binaryTree = new BinaryTree();@Beforepublic void createTree(){List<Integer> list = Arrays.asList(5, 4, 7, 2, 3, 6, 8);binaryTree.createTree(list);}@Testpublic void preOrder() {List<Integer> showList = new ArrayList<>();binaryTree.preOrder(showList, binaryTree.root);List<Integer> predictList = Arrays.asList(5, 4, 2, 3, 7, 6, 8);Assertions.assertEquals(predictList.toString(), showList.toString());}@Testpublic void inOrder() {List<Integer> showList = new ArrayList<>();binaryTree.inOrder(showList, binaryTree.root);List<Integer> predictList = Arrays.asList(2, 3, 4, 5, 6, 7, 8);Assertions.assertEquals(predictList.toString(), showList.toString());}@Testpublic void laOrder(){List<Integer> showList = new ArrayList<>();binaryTree.laOrder(showList, binaryTree.root);List<Integer> predictList = Arrays.asList(3, 2, 4, 6, 8, 7, 5);Assertions.assertEquals(predictList.toString(), showList.toString());}@Testpublic void bfs(){List<Integer> showList = new ArrayList<>();binaryTree.bfs(showList, binaryTree.root);List<Integer> predictList = Arrays.asList(5, 4, 7, 2, 6, 8, 3);Assertions.assertEquals(predictList.toString(), showList.toString());} }總結
以上是生活随笔為你收集整理的二叉查找树 java代码实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【链接转载保存】Collections.
- 下一篇: 【记录保存】批量删除进程