序言
最近在学习算法相关的东西,有一些树形结构的数据需要打印出来开对不对,比如二分搜索树,于是我就写了一个工具类。希望能帮到大家
效果
这里写图片描述
源码
BST(二分搜索树)
package com.zgh.algorithm.search;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import com.zgh.algorithm.search.TreePrintUtil.TreeNode;
/**
* 二分搜索树
*
* @author zhuguohui
*
*/
public class BST, V> {
private int count;
private Node root;
private int maxLevel;
public int size() {
return count;
}
public boolean isEmpty() {
return count == 0;
}
public void insert(K k, V v) {
Node node = new Node<>(k, v);
if (insertToNode(root, node, 0)) {
// 如果是插入则将count+1
count++;
}
}
public Node getRoot() {
return root;
}
/**
*
* @param parint
* @param node
* @return 如果新增返回true,如果只是更新返回false
*/
private boolean insertToNode(Node parent, Node node, int level) {
if (root == null) {
root = node;
maxLevel = 1;
return true;
}
if (parent.k.compareTo(node.k) == 0) {
// key相同则更新
parent.v = node.v;
return false;
} else if (parent.k.compareTo(node.k) < 0) {
// 如果node比parent大,则插入到右子树
if (parent.right == null) {
parent.right = node;
if (level + 1 > maxLeve