波兰式转换为逆波兰式

    xiaoxiao2021-03-26  47

    波兰式是在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之前,所以这种表示法也称为前缀表达式。例如: (2 + 4) * 6的波兰式为 *+246逆波兰式(Reverse Polish notation,RPN,或逆波兰记法),将运算符写在操作数之后,也叫后缀表达式。例如:(2 + 4) * 6的逆波兰式为 24+6*算法实现(java): 构建波兰式二叉树后续遍历二叉树生成逆波兰式 输入时每次接受一个运算符或操作数 public class Test { public static void main(String[] args){ System.out.println("Build PN tree:"); Node tree = buildTree(); System.out.println("\npreOrderTraverse:"); preOrderTraverse(tree); System.out.println("\ninOrderTraverse:"); inOrderTraverse(tree); System.out.println("\npostOrderTraverse:"); postOrderTraverse(tree); } static class Node{ String value; Node left; Node right; } static Node buildTree(){ Scanner input = new Scanner(System.in); String exp = input.next(); Node node = new Node(); node.value = exp; if(exp.equals("+") || exp.equals("-") || exp.equals("*") || exp.equals("/")){ node.left = buildTree(); node.right = buildTree(); } return node; } public static void preOrderTraverse(Node tree){ if(tree == null){ return; } System.out.print(tree.value); preOrderTraverse(tree.left); preOrderTraverse(tree.right); } public static void inOrderTraverse(Node tree){ if(tree == null){ return; } if(tree.left != null){ System.out.print("("); } inOrderTraverse(tree.left); System.out.print(tree.value); inOrderTraverse(tree.right); if(tree.right != null){ System.out.print(")"); } } public static void postOrderTraverse(Node tree){ if(tree == null){ return; } postOrderTraverse(tree.left); postOrderTraverse(tree.right); System.out.print(tree.value); } }
    转载请注明原文地址: https://ju.6miu.com/read-662910.html

    最新回复(0)