📅  最后修改于: 2023-12-03 15:02:06.109000             🧑  作者: Mango
在计算机科学中,后序遍历是二叉树遍历的一种方式,它按照遍历左子树、遍历右子树、访问根节点的顺序,对二叉树进行遍历。在实际编程中,后序遍历也经常用来计算表达式的值。
本文将介绍如何在Java程序中执行后序树遍历。
后序遍历算法包括以下步骤:
以下是后序遍历的递归实现方式:
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程序中执行后序树遍历,以及在此基础上进行数学表达式求值的应用。