java
1public class Node { 2 3 public String expression; // このノードが表す式(二分木への分割後は演算子または項となる) 4 public Node left = null; // 左の子ノード 5 public Node right = null; // 右の子ノード 6 public StringBuilder rt = new StringBuilder(""); 7 public String rt_expression; //後置記法の式 8 9public void traversePostorder() 10 { 11 // 左右に子ノードをもつ場合、表示する前にノードを再帰的に巡回する 12 if (left != null) 13 left.traversePostorder(); 14 if (right != null) 15 right.traversePostorder(); 16 17 //rtにexpressionを追加していって後置記法の数式を完成させる 18 this.rt.append(expression); 19 // 巡回を終えた後でノードの演算子または項を表示する 20 // (読みやすさのために項の後に空白を補って表示する) 21 System.out.print(expression + " "); 22 } 23 24public String getRtExpression() { 25 this.rt_expression = this.rt.toString(); 26 return this.rt_expression; 27 } 28 29}
困っていること
現在、中置記法の数式を後置記法の式に直して計算するコードを書いています。
そのコードの一部で、上のコードは、中置記法の式から二分木を作ったものを後順走査でたどってStringBuilder型のrtに代入していき、完成した後置記法の式"rt"をフィールドのrt_expressionに代入しているところです。
しかし、このメソッドを実行した後にrt_expressionを画面表示すると、最後に代入された文字しか表示されません(+のみなど)。おそらく毎回1文字ずつ上書きされてしまっているのですが、どのように改善すれば良いのか教えてください。
ちなみに、this.rt_expression = rt.toString();の1文も毎回実行されるのは良くないと理解しているので、こちらも良い書き方を教えてくれたら嬉しいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。