波兰式是在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之前,所以这种表示法也称为前缀表达式。例如: (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