使用Java函数实现树的遍历(先序、中序、后序)
发布时间:2023-10-07 03:50:11
树是一种常见的数据结构,具有层次性和分支性。树的遍历是指按照某一顺序,依次访问树中的每个节点,且每个节点只访问一次。常见的树的遍历方式有先序遍历、中序遍历和后序遍历。下面将使用Java编程语言实现这三种遍历方式。
首先,我们需要定义一个树节点的类Node,包含一个value属性表示节点的值,以及left和right两个属性分别表示节点的左子树和右子树。代码如下:
class Node {
int value;
Node left;
Node right;
public Node(int value) {
this.value = value;
}
}
接下来,我们定义一个树的类Tree,包含根节点root的属性,以及实现三种遍历方式的函数。其中,先序遍历使用递归方式实现,中序遍历和后序遍历使用迭代方式实现。代码如下:
import java.util.Stack;
class Tree {
Node root;
public Tree(Node root) {
this.root = root;
}
// 先序遍历:根节点 -> 左子树 -> 右子树
public void preOrderTraversal(Node node) {
if (node != null) {
System.out.print(node.value + " ");
preOrderTraversal(node.left);
preOrderTraversal(node.right);
}
}
// 中序遍历:左子树 -> 根节点 -> 右子树
public void inOrderTraversal(Node node) {
Stack<Node> stack = new Stack<>();
while (node != null || !stack.isEmpty()) {
while (node != null) {
stack.push(node);
node = node.left;
}
node = stack.pop();
System.out.print(node.value + " ");
node = node.right;
}
}
// 后序遍历:左子树 -> 右子树 -> 根节点
public void postOrderTraversal(Node node) {
Stack<Node> stack = new Stack<>();
Node lastNodeVisited = null;
while (node != null || !stack.isEmpty()) {
if (node != null) {
stack.push(node);
node = node.left;
} else {
Node peekNode = stack.peek();
// 如果右子树存在,并且没有被访问过,则遍历右子树
if (peekNode.right != null && peekNode.right != lastNodeVisited) {
node = peekNode.right;
} else {
System.out.print(peekNode.value + " ");
lastNodeVisited = stack.pop();
}
}
}
}
}
接下来我们可以创建一个简单的树并进行遍历。代码如下:
public class Main {
public static void main(String[] args) {
// 创建一个二叉树
Node root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.left.right = new Node(5);
root.right.left = new Node(6);
root.right.right = new Node(7);
Tree tree = new Tree(root);
System.out.print("先序遍历结果:");
tree.preOrderTraversal(root);
System.out.print("
中序遍历结果:");
tree.inOrderTraversal(root);
System.out.print("
后序遍历结果:");
tree.postOrderTraversal(root);
}
}
以上代码中,我们创建了一个二叉树,并分别使用先序、中序和后序遍历进行输出。输出结果为:
先序遍历结果:1 2 4 5 3 6 7 中序遍历结果:4 2 5 1 6 3 7 后序遍历结果:4 5 2 6 7 3 1
以上就是使用Java函数实现树的遍历的方法和代码。通过这些代码,我们可以了解树的遍历原理并进行实际应用和实现。
