자바로 수식 이진트리 표현하기.
2010-08-17
|
by jhw863
3154
안녕 하십니까 저번에 한번 자바로 글을 올렸다가 정말 많은 도움을 받은 사람중 한사람입니다 다름이 아니라 이번에 제가
다시 자바공부를 병행하면서 알고리즘도 같이 공부하는데 이번에는 수식트리때문에 막혀서 글을 올려봅니다.
자바에서 call by value라는 방법이서 root노드를 아무리 보내도 절대 바뀌어서 메인쪽으로 돌아 오지 않는다는것은
알고있습니다 하지만 이것을 어떻게 해결해야 할지 난감합니다 앞으로 열심히 공부할수 있게 꼭좀 도와 주십시오.
class ETNode{
ETNode left;
ETNode right;
String data;
}
class ET{
private ETNode root = null;
public ETNode CreateNode(String newdata){
ETNode newnode = new ETNode();
newnode.left = null;
newnode.right = null;
newnode.data = newdata;
return newnode;
}
public void destroyTree(ETNode root){
if(root == null){
return;
}
destroyTree(root.left);
destroyTree(root.right);
root = null;
}
public void preorderPrintTree(ETNode node){
if(node == null){
return;
}
System.out.print(" "+node.data);
preorderPrintTree(node.left);
preorderPrintTree(node.right);
}
public void inorderPrintTree(ETNode node){
if(node == null){
return;
}
System.out.print("(");
inorderPrintTree(node.left);
System.out.print(" "+node.data);
inorderPrintTree(node.right);
System.out.print(")");
}
public void postorderPrintTree(ETNode node){
if(node == null){
return;
}
postorderPrintTree(node.left);
postorderPrintTree(node.right);
System.out.print(" "+node.data);
}
public ETNode buildExpressionTree(String[] pfe ,ETNode node){
int len = pfe.length;
String token = pfe[len -1];
pfe[len -1] = "\0";
root = node;
if(token == "+" || token == "-" || token == "*" || token == "/"){//연산자인 경우
CreateNode(token);
buildExpressionTree(pfe, root.right);
buildExpressionTree(pfe, root.left);
}
else{
root = CreateNode(token);
}
return root;
}
public double Evaluate(ETNode tree){
String temp = null;
double left = 0;
double right = 0;
double result = 0;
if(tree == null){
return 0;
}
if(tree.data == "+" | tree.data == "-" | tree.data == "*" | tree.data == "/"){
left = Evaluate(tree.left);
right = Evaluate(tree.right);
if(tree.data == "+"){
result = left + right;
}
else if(tree.data == "-"){
result = left - right;
}
else if(tree.data == "*"){
result = left * right;
}
else if(tree.data == "/"){
result = left / right;
}
else{
temp = null;
temp = tree.data;
result = Double.parseDouble(temp);
}
}
return result;
}
}
public class ET_Tree {
public static void main(String[] args) {
ETNode root = new ETNode();
ET e = new ET();
String pe[] = {"7", "1", "*" ,"5", "2", "-", "/"};
//String pe[] = {"71*52-/"};
root = e.buildExpressionTree(pe, root);
//트리출력
System.out.println("Preorder....");
e.preorderPrintTree(root);
System.out.println("\n");
}
}