树是一种很有意思的数据结构,它既能像链表那样快速的插入和删除,又能像有序数组那样快速的查找,一般我们探究的树是一种特殊的树 -- 二叉树。如果树中每个节点最多只能有两个子节点,这样的树就成为“二叉树”,否则,就是多路树了。二叉搜索树是一种更特殊的树 -- 父节点的左子节点的关键字值小于父节点,右子节点的关键字的值大于或等于这个父节点。
一般树的节点包括三个部分:data、leftNode、rightNode。节点的数值,左子节点和右子节点。
public class Node {
int data;
Node leftChild;
Node rightChild;
}
1、 二叉搜索树的查找:
public Node find(int key) {
Node current = root;
while (current.data != key) {
if (current.data > key) {
current = current.leftChild;
}
if (current.data < key) {
current = current.rightChild;
}
if (current == null) {
return null;
}
}
return current;
}
2、二叉搜索树的插入新节点:
思路:1、如果没有节点,则待插入的节点直接插入到根节点;
2、寻找合适的位置以便插入节点:current、parent分别表示当前搜索到的节点及其父节点,如果待搜索节点的值大于current节点的值,则current = current.rightChild;,否则,current = current.leftChild;结束的条件是:current==null为true,则可以将待插入节点插入到parent的后面了。
/**
* @param key
* 待插入的节点的值 1、如果没有节点,则待插入的节点直接插入到根节点;
* 2、通过两个引用:current、parent分别表示当前搜索到的节点及其父节点
* 找到的条件是:current==null为true
*/
public void insert(int key) {
Node insertNode = new Node();
insertNode.data = key;
Node current, parent;
if (root == null) {
root = insertNode;
} else {
current = root;
while (true) {
parent = current;
if (current.