1、新建Java文件Tree.java,定义如下数组,例如:
data = [5,8,1,9,6,3,2,4,8,7]
2、定义一个二叉树,将数组中每个数字及其在数组中的位置存入二叉树的的叶子结点中,左结点值比父结点小,右结点值比父结点大,生成的二叉树如下:
3、编译运行Tree.java文件,提示输入一个数字(please input data:),在二叉树中查找其位置:
1)输入1,则提示:data:1 position:3
2)输入8,则提示:data:8 position:2,9
3)输入10,则提示:data:10 not exist
java代码如下:
class TreeNode {
int sum = 1;
int val;
int index;
TreeNode left;
TreeNode right;
public TreeNode() {
}
public TreeNode(int val, int index) {
this.val = val;
this.index = index;
this.left = null;
this.right = null;
}
}
public class Tree {
public static void main(String[] args) {
int[] data = {5,8,1,9,6,3,2,4,8,7};
TreeNode treeNodes = null;
Tree tree = new Tree();
//初始化树,使用遍历的方式一个一个元素的添加
for (int i = 0; i < data.length; i++) {
treeNodes = tree.CreateTree(data[i], treeNodes ,i);
}
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个你想要查询的数字:");
while (scanner.hasNext()){
int sameData = scanner.nextInt();
System.out.println(tree.SelectNode(sameData, treeNodes));
System.out.println("请输入一个你想要查询的数字:");
}
}
/**
* 使用递归的方式进行树的构建,下面的查询操作也是使用递归的方式实现
* */
public TreeNode CreateTree(int data,TreeNode treeNode ,int i){
//初始化根节点
if (treeNode == null){
treeNode = new TreeNode();
treeNode.val = data;
treeNode.index = 1;
return treeNode;
}
//开始判断是否满足要求
if (data == treeNode.val){
treeNode.index= i + 1 ;
treeNode.sum += 1;
}
if (data > treeNode.val){
if (treeNode.right == null ){
treeNode.right = new TreeNode(data,i + 1);
return treeNode;
}
CreateTree(data,treeNode.right,i );
}else {
if (treeNode.left == null ){
treeNode.left = new TreeNode(data,i + 1);
return treeNode;
}
CreateTree(data,treeNode.left,i );
}
return treeNode;
}
/**
* 递归遍历树,找到对应的元素,找不到则返回not exist,找到则返回数据
* */
public String SelectNode(int data , TreeNode treeNode){
if (treeNode == null){
return "data: "+ data +" not exist";
}
if (data == treeNode.val){
if (treeNode.sum > 1){
return "data: "+ data +" position: " + treeNode.sum +"," + treeNode.index;
}else {
return "data: "+ data +" position: " + treeNode.index;
}
}
if (treeNode.val > data){
return SelectNode(data,treeNode.left);
} else {
return SelectNode(data,treeNode.right);
}
}
/**
* 测试数据是否已添加到树,其实就是递归遍历树,把数据封装到hashmap里面
* */
/* public HashMap<Integer, String> traversal(HashMap hashMap, TreeNode treeNode){
if (treeNode == null){
return null;
}
if (treeNode.sum > 1){
hashMap.put(treeNode.val,treeNode.sum+"," + treeNode.index);
}else {
hashMap.put(treeNode.val,String.valueOf(treeNode.index));
}
if (treeNode.right != null){
traversal(hashMap,treeNode.right);
}
if (treeNode.left != null){
traversal(hashMap,treeNode.left);
}
return hashMap;
}*/
新手打怪升级中,如觉得博主写得很垃圾的可以评论留言让博主多学习一下。