欢迎访问宙启技术站
智能推送

如何在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中编写二叉树遍历函数的两种方法,可以根据实际需求选择合适的方法。无论是递归还是迭代,都能够完成二叉树的遍历操作。