这就是一个二叉搜索树
现在开始用代码来描述这棵树。先看节点类
package test;
/**
* 树节点类
*/
public class TreeNode
{
public int keyValue; //关键字值
public TreeNode leftNode;//左节点
public TreeNode rightNode;//右节点
public TreeNode(){}
public TreeNode(int Key)
{
this.keyValue = Key;
}
}
再看代码
public TreeNode search(int Key)
{
TreeNode node = root;
// 首先定义一个节点让其指向根,在下面的循环中
// 只要节点值不等于要查找的节点值就进入循环如果没有找到则返回null
while (node.keyValue != Key)
{
if (Key < node.keyValue)
{ // 如果要查找的值小于节点值则指向左节点
node = node.leftNode;
}
else
{ // 否则指向右节点
node = node.rightNode;
}
if (node == null)
{ // 如果节点为空了则返回null
return null;
}
}
return node;
}
代码如下:
public void insert(int Key) {
TreeNode node = new TreeNode(Key);
// 添加节点之前首先要找到要添加的位置,这样就要记住要添加节点的父节点
// 让父节点的左右指向要添加的节点
if (root == null) { // 如果根结点为空,则根节点指向新节点
root = node;
} else {
TreeNode currentNode = root;// 定义当前节点并指向根节点
TreeNode parentNode;
while (true) { // 寻找节点添加的位置
parentNode = currentNode;
if (Key < currentNode.keyValue) {
currentNode = currentNode.leftNode;
if (currentNode == null) { // 当找到空节点的时候,父节点的左节点指向新节点
parentNode.leftNode = node;
return;
}
} else {
currentNode = currentNode.rightNode;
if (currentNode == null) { // 当找到空节点的时候,父节点的右节点指向新节点
parentNode.rightNode = node;
return;
}
}
}
}
} 
public void display(TreeNode node)
{
if (node != null)
{
display(node.leftNode);
System.out.println(node.keyValue + ",");
display(node.rightNode);
}
} public int max()
{
TreeNode node = root;
TreeNode parent = null;
while (node != null)
{
parent = node;
node = node.rightNode;
}
return parent.keyValue;
}
public int min()
{
TreeNode node = root;
TreeNode parent = null;
while (node != null)
{
parent = node;
node = node.leftNode;
}
return parent.keyValue;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/zzc8265020/article/details/47805035