public <E extends Comparable> TreeNode buildFromArray(@NotNull E[] arrs){
TreeNode root = null;
for (E ele : arrs){
TreeNode current = new TreeNode(ele,null,null);
root = insert(root,current);
}
return root;
}
插入
public TreeNode insert(TreeNode root, TreeNode node){
TreeNode parent = null;
TreeNode current = root;
while (current != null){
parent = current;
if (node.element.compareTo(current.element) >= 0){
current = current.right;
}else {
current = current.left;
}
}
node.parent = parent;
if (parent == null){
root = node;
return root;
}
if (parent.element.compareTo(node.element) > 0){
parent.left = node;
}else {
parent.right = node;
}
return root;
}
查找
/**
* 递归
* @param root
* @param target
* @param <E>
* @return
*/
public <E extends Comparable> TreeNode search_1(TreeNode root, E target){
// System.out.println(root);
if (root == null || target.compareTo(root.element) == 0){
return root;
}
if (target.compareTo(root.element) < 0){
return search_1(root.left, target);
} else {
return search_1(root.right, target);
}
}
/**
* 非递归、迭代
* @param root
* @param target
* @param <E>
* @return
*/
public <E extends Comparable>TreeNode search_2(TreeNode root, E target){
TreeNode current = root;
while (current != null){
if (target.compareTo(current.element) == 0){
return current;
}
if (target.compareTo(current.element) < 0){
current = current.left;
}else {
current = current.right;
}
}
return root;
}
最大/最小值
/**
* 获得bst中的最小元素
* @param root
* @return
*/
public TreeNode getMinNode(TreeNode root){
TreeNode current = root;
while (current.left != null){
current = current.left;
}
return current;
}
/**
* 获得bst中的最大元素
* @param root
* @return
*/
public TreeNode getMaxNode(TreeNode root){
TreeNode current = root;
while (current.right != null){
current = current.right;
}
return current;
}