如何在Java中编写一个二叉树遍历函数
发布时间:2023-06-30 16:41:00
在Java中编写一个二叉树遍历函数可以通过递归或迭代实现。下面我将分别介绍这两种方法。
1. 递归遍历二叉树:
递归是最直观和常用的方法之一,它通过调用函数自身来实现遍历。对于二叉树的遍历,有三种常见的方式: 前序遍历、中序遍历和后序遍历。
前序遍历: 先遍历根节点,然后遍历左子树,最后遍历右子树。
public void preOrderTraversal(TreeNode root) {
if (root == null) return;
System.out.println(root.val); // 遍历根节点
preOrderTraversal(root.left); // 遍历左子树
preOrderTraversal(root.right); // 遍历右子树
}
中序遍历: 先遍历左子树,然后遍历根节点,最后遍历右子树。
public void inOrderTraversal(TreeNode root) {
if (root == null) return;
inOrderTraversal(root.left); // 遍历左子树
System.out.println(root.val); // 遍历根节点
inOrderTraversal(root.right); // 遍历右子树
}
后序遍历: 先遍历左子树,然后遍历右子树,最后遍历根节点。
public void postOrderTraversal(TreeNode root) {
if (root == null) return;
postOrderTraversal(root.left); // 遍历左子树
postOrderTraversal(root.right); // 遍历右子树
System.out.println(root.val); // 遍历根节点
}
2. 迭代遍历二叉树:
迭代遍历二叉树可以使用栈实现。具体思路是,将根节点入栈,然后循环取出栈顶节点,并将其左右子节点入栈,直到栈为空。
前序遍历:
public void preOrderTraversal(TreeNode root) {
if (root == null) return;
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while (!stack.isEmpty()) {
TreeNode node = stack.pop();
System.out.println(node.val); // 遍历当前节点
if (node.right != null) stack.push(node.right); // 右子节点入栈
if (node.left != null) stack.push(node.left); // 左子节点入栈
}
}
中序遍历:
public void inOrderTraversal(TreeNode root) {
if (root == null) return;
Stack<TreeNode> stack = new Stack<>();
TreeNode node = root;
while (node != null || !stack.isEmpty()) {
while (node != null) {
stack.push(node); // 将当前节点入栈
node = node.left; // 遍历左子树
}
node = stack.pop();
System.out.println(node.val); // 遍历当前节点
node = node.right; // 遍历右子树
}
}
后序遍历:
public void postOrderTraversal(TreeNode root) {
if (root == null) return;
Stack<TreeNode> stack = new Stack<>();
Stack<TreeNode> output = new Stack<>();
stack.push(root);
while (!stack.isEmpty()) {
TreeNode node = stack.pop();
output.push(node);
if (node.left != null) stack.push(node.left);
if (node.right != null) stack.push(node.right);
}
while (!output.isEmpty()) {
System.out.println(output.pop().val); // 遍历输出节点
}
}
以上是在Java中编写二叉树遍历函数的两种方法,可以根据实际需求选择合适的方法。无论是递归还是迭代,都能够完成二叉树的遍历操作。
