Java中如何实现二叉树遍历函数?
发布时间:2023-09-30 01:00:37
在Java中,实现二叉树的遍历函数可以利用递归或者迭代的方法。下面将分别介绍这两种方法。
1. 递归遍历法:
递归遍历二叉树的方法有前序遍历、中序遍历和后序遍历。
(1)前序遍历:
前序遍历的顺序是先访问根节点,然后递归遍历左子树,最后递归遍历右子树。
public void preOrderTraversal(TreeNode root) {
if (root != null) {
System.out.print(root.val + " "); // 访问根节点
preOrderTraversal(root.left); // 递归遍历左子树
preOrderTraversal(root.right); // 递归遍历右子树
}
}
(2)中序遍历:
中序遍历的顺序是先递归遍历左子树,然后访问根节点,最后递归遍历右子树。
public void inOrderTraversal(TreeNode root) {
if (root != null) {
inOrderTraversal(root.left); // 递归遍历左子树
System.out.print(root.val + " "); // 访问根节点
inOrderTraversal(root.right); // 递归遍历右子树
}
}
(3)后序遍历:
后序遍历的顺序是先递归遍历左子树,然后递归遍历右子树,最后访问根节点。
public void postOrderTraversal(TreeNode root) {
if (root != null) {
postOrderTraversal(root.left); // 递归遍历左子树
postOrderTraversal(root.right); // 递归遍历右子树
System.out.print(root.val + " "); // 访问根节点
}
}
2. 迭代遍历法:
使用迭代的方法实现二叉树的遍历需要借助辅助数据结构,如栈或队列。
(1)前序遍历:
前序遍历的非递归实现可以使用栈来辅助实现。
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.print(node.val + " ");
// 先压入右子树,再压入左子树,保证左子树先遍历
if (node.right != null) {
stack.push(node.right);
}
if (node.left != null) {
stack.push(node.left);
}
}
}
(2)中序遍历:
中序遍历的非递归实现需要利用栈来跟踪遍历过程。
public void inOrderTraversal(TreeNode root) {
if (root == null) {
return;
}
Stack<TreeNode> stack = new Stack<>();
TreeNode curr = root;
while (curr != null || !stack.isEmpty()) {
while (curr != null) {
stack.push(curr);
curr = curr.left;
}
curr = stack.pop();
System.out.print(curr.val + " ");
curr = curr.right;
}
}
(3)后序遍历:
后序遍历的非递归实现需要使用两个栈来辅助实现。
public void postOrderTraversal(TreeNode root) {
if (root == null) {
return;
}
Stack<TreeNode> stack1 = new Stack<>();
Stack<TreeNode> stack2 = new Stack<>();
stack1.push(root);
while (!stack1.isEmpty()) {
TreeNode node = stack1.pop();
stack2.push(node);
if (node.left != null) {
stack1.push(node.left);
}
if (node.right != null) {
stack1.push(node.right);
}
}
while (!stack2.isEmpty()) {
System.out.print(stack2.pop().val + " ");
}
}
通过递归或者迭代的方法,可以实现二叉树的前序、中序和后序遍历。根据具体的需求和情况,选择适合的方法来实现二叉树的遍历函数。
