📜  Java程序执行后序树遍历(1)

📅  最后修改于: 2023-12-03 15:02:06.109000             🧑  作者: Mango

Java程序执行后序树遍历

在计算机科学中,后序遍历是二叉树遍历的一种方式,它按照遍历左子树、遍历右子树、访问根节点的顺序,对二叉树进行遍历。在实际编程中,后序遍历也经常用来计算表达式的值。

本文将介绍如何在Java程序中执行后序树遍历。

后序树遍历算法

后序遍历算法包括以下步骤:

  1. 如果当前节点非空,递归遍历左子树。
  2. 如果当前节点非空,递归遍历右子树。
  3. 访问当前节点。

以下是后序遍历的递归实现方式:

public void postorder(TreeNode root) {
    if (root == null) {
        return;
    }
    postorder(root.left);
    postorder(root.right);
    visit(root);
}

其中,visit()方法用来访问节点。在计算表达式的值的情况下,visit()方法将实现执行相应的操作,例如加法、减法等。

代码实现示例

下面是一个使用后序遍历计算数学表达式的示例代码:

class TreeNode {
    char val;
    TreeNode left;
    TreeNode right;
    public TreeNode(char val) {
        this.val = val;
    }
}

public class ExpressionTree {
    public int evaluate(TreeNode root) {
        if (root == null) {
            return 0;
        }
        if (root.left == null && root.right == null) {
            return root.val - '0';
        }
        int left = evaluate(root.left);
        int right = evaluate(root.right);
        switch (root.val) {
            case '+': return left + right;
            case '-': return left - right;
            case '*': return left * right;
            case '/': return left / right;
            default: return 0;
        }
    }

    public static void main(String[] args) {
        char[] postfix = {'2', '3', '1', '*', '+', '9', '-'};
        ExpressionTree obj = new ExpressionTree();
        TreeNode root = obj.buildTree(postfix);
        int result = obj.evaluate(root);
        System.out.println(result);
    }

    public TreeNode buildTree(char[] postfix) {
        Stack<TreeNode> stack = new Stack<>();
        for (char c : postfix) {
            if (Character.isDigit(c)) {
                TreeNode node = new TreeNode(c);
                stack.push(node);
            } else {
                TreeNode right = stack.pop();
                TreeNode left = stack.pop();
                TreeNode node = new TreeNode(c);
                node.left = left;
                node.right = right;
                stack.push(node);
            }
        }
        return stack.pop();
    }
}

在上面的示例程序中,我们首先将中缀表达式转换为后缀表达式,然后通过后序遍历构建表达式树,最后计算表达式的值。

结论

后序遍历是二叉树遍历的一种方式,在实际编程中经常用来计算表达式的值。通过本文的介绍,我们学习了如何在Java程序中执行后序树遍历,以及在此基础上进行数学表达式求值的应用。