二叉查找树是基于二叉树的,其结点数据结构定义为如下:
public class TreeNode {
public Integer data;
/*该节点的父节点*/
public TreeNode parent;
/*该节点的左子节点*/
public TreeNode left;
/*该节点的右子节点*/
public TreeNode right;
public TreeNode(Integer data) {
this.data = data;
}
@Override
public String toString() {
return "TreeNode [data=" + data + "]";
}
}
现在明白了什么是二叉查找树,那么二叉查找树的基本操作又是如何来实现的呢?
查找
在二叉查找树中查找x的过程如下:
1、若二叉树是空树,则查找失败。
2、若x等于根结点的数据,则查找成功,否则。
3、若x小于根结点的数据,则递归查找其左子树,否则。
4、递归查找其右子树。
根据上述的步骤,写出其查找操作的代码:
/**
* @param data
* @return TreeNode
*/
public TreeNode findTreeNode(Integer data){
if(null == root){
return null;
}
TreeNode current = root;
while(current != null){
if(current.data > data){
current = current.left;
}else if(current.data < data){
current = current.right;
}else {
return current;
}
}
return null;
}
插入
二叉查找树的插入过程如下:
1.若当前的二叉查找树为空,则插入的元素为根节点;
2.若插入的元素值小于根节点值,则将元素插入到左子树中;
3.若插入的元素值不小于根节点值,则将元素插入到右子树中。
/**
* 往树中加节点
* @param data
* @return Boolean 插入成功返回true
*/
public Boolean addTreeNode(Integer data) {
if (null == root) {
root = new TreeNode(data);
System.out.println("数据成功插入到平衡二叉树中");
return true;
}
TreeNode treeNode = new TreeNode(data);// 即将被插入的数据
TreeNode currentNode = root;
TreeNode parentNode;
while (true) {
parentNode = currentNode;// 保存父节点
// 插入的数据比父节点小
if (currentNode.data > data) {
currentNode = currentNode.left;
// 当前父节点的左子节点为空
if (null == currentNode) {
parentNode.left = treeNode;
treeNode.parent = parentNode;
System.out.println("数据成功插入到二叉查找树中");
size++;
return true;
}
// 插入的数据比父节点大
} else if (currentNode.data < data) {
currentNode = currentNode.right;
// 当前父节点的右子节点为空
if (null == currentNode) {
parentNode.right = treeNode;
treeNode.parent = parentNode;
System.out.println("数据成功插入到二叉查找树中");
size++;
return true;
}
} else {
System.out.println("输入数据与节点的数据相同");
return false;
}
}
}
基础面试题
主要内容包括:HTML,CSS,JavaScript,浏览器,性能优化等等