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,93)输入10,则提示: data:10 not exist
时间: 2024-03-20 15:41:55 浏览: 55
B_Tree1.rar_MáS_b tree java_tttee1.com
好的,我明白了。以下是实现该功能的 Java 代码:
```java
import java.util.Scanner;
class TreeNode {
int val;
int pos;
TreeNode left;
TreeNode right;
public TreeNode(int val, int pos) {
this.val = val;
this.pos = pos;
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 root = buildTree(data);
Scanner sc = new Scanner(System.in);
while (true) {
System.out.print("please input data: ");
int target = sc.nextInt();
TreeNode node = findNode(root, target);
if (node != null) {
System.out.println("data:" + node.val + " position:" + node.pos);
} else {
System.out.println("data:" + target + " not exist");
}
}
}
private static TreeNode buildTree(int[] data) {
TreeNode root = new TreeNode(data[0], 1);
for (int i = 1; i < data.length; i++) {
insertNode(root, data[i], i + 1);
}
return root;
}
private static void insertNode(TreeNode root, int val, int pos) {
if (val < root.val) {
if (root.left == null) {
root.left = new TreeNode(val, pos);
} else {
insertNode(root.left, val, pos);
}
} else if (val > root.val) {
if (root.right == null) {
root.right = new TreeNode(val, pos);
} else {
insertNode(root.right, val, pos);
}
}
}
private static TreeNode findNode(TreeNode root, int val) {
if (root == null) {
return null;
} else if (root.val == val) {
return root;
} else if (val < root.val) {
return findNode(root.left, val);
} else {
return findNode(root.right, val);
}
}
}
```
实现过程如下:
1. 首先定义一个 `TreeNode` 类,表示二叉树的结点,包含两个属性:`val` 表示结点的值,`pos` 表示该值在原数组中的位置。
2. 定义 `buildTree` 方法,该方法接收一个整型数组作为参数,返回构建完成的二叉树的根结点。具体实现为:先以数组的第一个元素作为根节点,遍历数组中的其它元素,依次插入到二叉树中。
3. 定义 `insertNode` 方法,该方法接收一个结点、一个值和一个位置作为参数,将新的值插入到以该结点为根的子树中。如果要插入的值比该结点的值小,则将其插入到该结点的左子树中;否则将其插入到右子树中。如果左(右)子树为空,则直接插入;否则递归调用该方法,插入到左(右)子树中。
4. 定义 `findNode` 方法,该方法接收一个结点和一个值作为参数,返回二叉树中值等于该值的结点。具体实现为:如果当前结点为空,则返回空;如果当前结点的值等于目标值,则返回该结点;否则根据目标值与当前结点的大小关系,递归地在左子树或右子树中查找目标结点。
5. 在 `main` 方法中,先调用 `buildTree` 方法构建二叉树,然后不断循环,提示输入一个数字,并调用 `findNode` 方法查找该数字在二叉树中的位置。如果找到了,则输出该结点的值和位置;否则输出“not exist”。
希望对你有帮助!
阅读全文