请用java使用线性数据构造树,递归遍历树,查询并返回某一子节点
时间: 2024-04-14 19:30:26 浏览: 122
Java递归遍历树形结构
当我们使用线性数据结构(比如数组或链表)来构造树时,可以通过递归遍历树并查询并返回某一子节点。下面是一个使用Java代码示例:
```java
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
public class TreeTraversal {
public static TreeNode constructTree(int[] arr, int index) {
if (index >= arr.length || arr[index] == -1) {
return null;
}
TreeNode root = new TreeNode(arr[index]);
root.left = constructTree(arr, 2 * index + 1);
root.right = constructTree(arr, 2 * index + 2);
return root;
}
public static TreeNode findNode(TreeNode root, int target) {
if (root == null || root.val == target) {
return root;
}
TreeNode leftResult = findNode(root.left, target);
if (leftResult != null) {
return leftResult;
}
TreeNode rightResult = findNode(root.right, target);
if (rightResult != null) {
return rightResult;
}
return null;
}
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, -1, -1, -1, -1, 6};
TreeNode root = constructTree(arr, 0);
int target = 5;
TreeNode result = findNode(root, target);
if (result != null) {
System.out.println("找到目标节点 " + target);
} else {
System.out.println("未找到目标节点 " + target);
}
}
}
```
在这个示例中,我们首先定义了一个`TreeNode`类来表示树的节点。然后,在`TreeTraversal`类中,定义了两个方法:
- `constructTree`方法用于通过线性数据结构构造树。我们使用数组`arr`来表示线性数据结构,`index`参数表示当前节点在数组中的索引。在构造树的过程中,我们按照二叉树的顺序构造节点,并递归构造左子树和右子树。
- `findNode`方法用于递归遍历树并查询并返回某一子节点。我们在每个节点上进行目标值的比较,如果找到目标节点,就返回该节点;否则,继续递归遍历左子树和右子树。
在`main`方法中,我们创建一个数组`arr`来表示线性数据结构,并调用`constructTree`方法来构造树。然后,调用`findNode`方法来查找目标节点。最后,根据返回结果输出相应的信息。
注意:在使用线性数据结构构造树时,我们需要注意数组中的占位符。在示例中,我们使用-1来表示空节点。
阅读全文