这就是一个二叉搜索树
现在开始用代码来描述这棵树。先看节点类
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