使用Java函数实现树的遍历和查找
发布时间:2023-06-14 22:13:24
树是一种非常重要的数据结构,它是面向对象程序设计中常用的数据结构之一。可以用来表示数据结构、家谱、语法树等等。树的遍历和查找是树数据结构中的重要操作,这也是学习树数据结构必需掌握的操作。
1. 树的遍历
树的遍历是指对树中的所有节点进行访问的操作。根据遍历顺序的不同,树的遍历可以分为先序遍历、中序遍历和后序遍历。
1.1 先序遍历
先序遍历是从树的根节点开始访问,先访问根节点,然后按照从左到右的顺序访问其子节点,直到所有节点都被访问。我们可以通过递归的方式来实现先序遍历:
public void preOrderTraversal(TreeNode node) {
if (node != null) {
System.out.print(node.val + " ");
preOrderTraversal(node.left);
preOrderTraversal(node.right);
}
}
1.2 中序遍历
中序遍历是从树的根节点开始访问,先访问其左子节点,然后访问根节点,最后访问其右子节点,直到所有节点都被访问。我们也可以通过递归的方式来实现中序遍历:
public void inOrderTraversal(TreeNode node) {
if (node != null) {
inOrderTraversal(node.left);
System.out.print(node.val + " ");
inOrderTraversal(node.right);
}
}
1.3 后序遍历
后序遍历是从树的根节点开始访问,先访问其子节点,然后访问根节点,直到所有节点都被访问。我们也可以通过递归的方式来实现后序遍历:
public void postOrderTraversal(TreeNode node) {
if (node != null) {
postOrderTraversal(node.left);
postOrderTraversal(node.right);
System.out.print(node.val + " ");
}
}
2. 树的查找
树的查找是指在树中寻找指定的节点或某些满足条件的节点。根据查找方式的不同,树的查找可以分为广度优先遍历和深度优先遍历。
2.1 广度优先遍历
广度优先遍历是从树的根节点开始,按照层次结构依次访问每个节点。在广度优先遍历中,我们需要使用队列来存储待访问的节点,依次出队并访问每个节点的子节点。
public TreeNode breadthFirstSearch(TreeNode root, int val) {
if (root == null) {
return null;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
if (node.val == val) {
return node;
}
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
}
return null;
}
2.2 深度优先遍历
深度优先遍历是从树的根节点开始,沿着路径遍历树的节点,直到找到目标节点或遍历完整个树。在深度优先遍历中,我们可以使用递归的方式来实现。
public TreeNode depthFirstSearch(TreeNode node, int val) {
if (node == null) {
return null;
}
if (node.val == val) {
return node;
}
TreeNode left = depthFirstSearch(node.left, val);
TreeNode right = depthFirstSearch(node.right, val);
return left == null ? right : left;
}
这就是树的遍历和查找操作的Java函数实现。掌握了这些基本操作,我们就可以更好地使用树数据结构。
