- 締切済み
配列による二分木
数値表現で書かれているString(infix)を受け取ってlevel-order-traversalの配列に変換するプログラムを作りたいのですが。どうやって書いたらいいかさえもわかりません。さらに、Level-orderからPostfixとlevel-orderからprefixに画面に出力する方法も知りたいのですが、アドバイスをもしよかったらお願いします。 質問の補足として、 2*X/5+3*Y-4*Z-1 (infix) をStringで受けたファンクションから -/-*+*12X5*4Z 3Y (level order) (空のノードと一番初めはスペースにしてます) っという風に変えたいということです。 二分木は ....................- .......... /....................- .....*........+..........*..........1... 2..X.....5...*......4...Z................ ................3..Y......................... のようになっています。(ちょと解りづらくて申し訳ないですが.を抜かした部分が木になっています) どなたかわかる方よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ChateauAres
- ベストアンサー率43% (64/148)
- hrm_mmm
- ベストアンサー率63% (292/459)
関連するQ&A
- 3次元配列から2次元配列に
3次元配列のデータを2次元配列に移すにはどのように したらよいのでしょうか.とりあえず下記のように考えてみましたが. data3[500][500][4000]; //3次元配列 data2[500][500]; //2次元配列 for(y=0; y<500; y++) for(x=0; x<500; x++){ for(z=0; z<4000; z++){ data2[y][x] = data3[y][x][z]; } } } これでいいのでしょうか?
- 締切済み
- C・C++・C#
- 木構造を描写すると重なる
vectorに入った要素をある順序で木構造で表現しようとしてます。 まず bbについてですがi=0から増えていくごとに0,-1,1,-2,2というようになります。これにより一つ目の子ノードは親ノードのy座標と同じ位置で次はposY(親ノードのY座標)-1*y1*2となり次は反対側にという風に下上下上という風に描写していきます。それを再起呼び出しで繰り返すことで全ての文字を木構造表現しています。 木構造の表現は出来ているのですが問題があります。子ノード同士が同じ座標に描かれます。どういうことかというと同じ親ノードを持つ複数の子ノード(子2、子3とします)同士がさらに複数の子ノード(子4)を持つ時に、子4は子4の子3ノードと重なってしまいます。y座標の決定がbbによって同じ振幅になるからだと思います。 しかし打開策が思いつかないので考えられる方法を教えていただきませんか? 下のプログラム自体はそれほど必要でないと思いますので細かい説明は辞めておきます。 class drawpair{ int bb=0;//子ノードのy座標を決める値 int x1; public drawpair(Graphics g,Vector x,int posX,int posY,Vector causal1){ for(int i=0;i<x.size();++i){ if(i==0){ //親ノードの描写.DrawWordで文字を描写します。 new DrawWord(g,(String)x.elementAt(i),posX,posY); }else{ //y座標を決めるbbの値の設定。 bb +=(int) Math.pow(-1,i)*(i-1); new DrawWord(g,(String)x.elementAt(i),getFontMetrics(f1).stringWidth((String)x.elementAt(0))+posX+50,posY+bb*2*y1); PairNode tes = new PairNode(); x1=tes.nextNode((String)x.elementAt(i),causal1); if(x1!=-1){ new drawpair(g,(Vector) causal.elementAt(x1),getFontMetrics(f1).stringWidth((String)x.elementAt(0))+posX+50,posY+bb*2*y1,causal); } } samplevec.removeAllElements(); } } }
- ベストアンサー
- Java
- ExcelVBAで配列をベースに配列を作る方法について
配列2つからそれぞれ要素を取り出して組み合わせ、 新たな配列を作りたくて下記のコードを書きましたが どうしても★のところで「コンパイルエラー:SubまたはFunctionが定義されていません。」 というエラーになってしまいます。すごく基本的なミスのようでお恥ずかしいのですが、 どうか解決方法・アドバイスをお願いいたします。m(_ _)m なお、最終的に作りたい配列の中身は下記のような規則性を持ったものです。 (後からもっと増やす予定なのでループでの処理を希望しています。) 'RankFirstCell = Array("B10", "B26", "B42", "B58", "B74", "H10", "H26", "H42", "H58", "H74", "N10", "N26", "N42", "N58", "N74") --- 問題の部分はここから --- Dim RankCols, RankRows As Variant RankCols = Array("B", "H", "N") RankRows = Array(10, 26, 42, 58, 74) Dim x, y, z As Byte Dim RankFirstCell(14) As String 'ここの記述の仕方の問題でしょうか? For x = 0 To 14 y = Application.WorksheetFunction.RoundDown(x / 5, 0) z = x Mod 5 RankFristCell(x) = RankCols(y) + RankRows(z) '★エラー行 Next x --- ここまで --- ちなみにx, y, zの値は下記のように希望通りループできているみたいです。(ウォッチウィンドウにて確認) x|y|z ------ 0|0|0 1|0|1 2|0|2 3|0|3 4|0|4 5|1|0 6|1|1 7|1|2 8|1|3 9|1|4 10|2|0 11|2|1 12|2|2 13|2|3 14|2|4 どうぞよろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- java 配列について
public class Sample{ public static void main( String[ ] args ){ String x = "pen"; String[] y = new String[1]; y[0] = x; x = "pencil"; System.out.println(y[0]); } } java初心者です。 配列の参照先を変更して 配列の数を変更せず配列0に 実行時にpencilと表示させたいのですが よい方法はありますでしょうか?
- ベストアンサー
- Java
- 配列の変換
Cで書かれている配列の static GLfloat A [8][3]={ {-5.0,-8.0,-5.0},{-5.0,8.0,-5.0}, {45.0,8.0,-5.0},{45.0,-8.0,-5.0}, {-5.0-8.0,5.0},{-5.0,8.0,5.0}, {45.0,8.0,5.0},{45.0,-8.0,5.0}, }; をObject Pascalの配列に変換したいです。多分、 A : array[X..Y] of GLfloat = (x,y,z,r); の形になると思うのですが、X,Y,x,y,z,rに入る値が分かりません。 (GLfloatはOpenGLの型定義です。Cでいうところのfloat) 分かる方いらしたら教えてください。
- ベストアンサー
- C・C++・C#
- 多段階配列について
Edx() = (x,y,z・・・)→Edxは変数の配列 For i = 1 To 3 Idx(i) = Edx() Next みたいなイメージで、 最終的には Idx(1).(x,y,z・・・) Idx(2).(a,b,c・・・) Idx(3).(f,g,l・・・) のような感じにしたいのですが、 どのように宣言、コーディングすれば宜しいんでしょうか?多段階配列について流れを教えていただきたいです。
- 締切済み
- Visual Basic
- 初心者です。 配列のエラーがどうしても解決できません。 誰か助けてください・・・
魔方陣のプログラムを考えて書いてみましたが、 エラーが出てしまい実行することができません。 class mahoujin{ public static void main(String args[]){ int n=3; int a[][] = new int[3][3]; int x=0; int y=1; for(int p=0;p<=3;p++){ for(int q=0;q<=3;q++){ a[p][q]=0;} } for(int i=1;i<=n*n;i++){ if((i%n)==1){x++; }else{x--; y++;} if(x==0){x=3;} if(y==3){y=0;} a[x][y]=i;} } } 空の配列や配列を外れるものがあるかをよく考えてみましたが、どうしても解決できません。助けてください・・・
- 締切済み
- Java
- VB.NET 2つの配列を連動して並び替える
VB.NETで2つの配列の一方を文字列の長い順番に並び替えて 他方の配列もその順番に並び替えたいのですが どのようにすればよろしいでしょうか。 例えば、 A(0)="Japan" A(1)="America" A(2)="People's Republic of China" A(3)="Republic of Korea" A(4)="Democratic People's Republic of Korea" B(0)="Tokyo" B(1)="Washington, D.C." B(2)="Beijing" B(3)="Seoul" B(4)="Pyongyang" という2つの配列があって 配列A()を文字列の長い順番に並び替えると A(0)="Democratic People's Republic of Korea" A(1)="People's Republic of China" A(2)="Republic of Korea" A(3)="America" A(4)="Japan" となりますが、この時配列B()も以下のように 配列A()の順番と同じ順番になってほしいのです。 B(0)="Pyongyang" B(1)="Beijing" B(2)="Seoul" B(3)="Washington, D.C." B(4)="Tokyo" なお、配列A()の並べ替えは以下のようにしていますので できましたら、このコードに追記する感じで 教えていただけるとありがたいです。 よろしくお願いします。 ------------------------------------------------------ Module Module1 Sub Main() Dim A(4) As String Dim B(4) As String A(0) = "Democratic People's Republic of Korea" A(1) = "People's Republic of China" A(2) = "Republic of Korea" A(3) = "America" A(4) = "Japan" B(0) = "Pyongyang" B(1) = "Beijing" B(2) = "Seoul" B(3) = "Washington, D.C." B(4) = "Tokyo" Dim comp As New LengthComparer() Array.Sort(A, comp) For Each s As String In A Console.WriteLine(s) Next End Sub Public Class LengthComparer Implements System.Collections.IComparer Implements System.Collections.Generic.IComparer(Of String) Public Function Compare(ByVal x As String, ByVal y As String) As Integer _ Implements System.Collections.Generic.IComparer(Of String).Compare If y Is Nothing AndAlso x Is Nothing Then Return 0 End If If y Is Nothing Then Return -1 End If If x Is Nothing Then Return 1 End If Return y.Length.CompareTo(x.Length) End Function Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _ Implements System.Collections.IComparer.Compare If y Is Nothing AndAlso x Is Nothing Then Return 0 End If If y Is Nothing Then Return -1 End If If x Is Nothing Then Return 1 End If If Not (TypeOf y Is String) Then Throw New ArgumentException("String型でない", "y") ElseIf Not (TypeOf x Is String) Then Throw New ArgumentException("String型でない", "x") End If Return Me.Compare(DirectCast(y, String), DirectCast(x, String).Length) End Function End Class End Module ------------------------------------------------------
- ベストアンサー
- Visual Basic
- ファイルからの読み込み 配列
座標データの数値のテキストファイルから配列の中に座標値を格納したいのですが、int型のデータを読み込んで配列に格納するのは、どのようにプログラムを組めばよろしいのでしょうか?下のようにxzahyou.csvというファイルから配列Z[i]に格納したくて組んでみたら、 br = new BufferedReader(new FileReader("xzahyou.csv")); for(int i=0;i<X.length;i++){ String line = br.readLine(); X[i]=line; X[i] = line;のところで互換性がないと出てきました。int型の場合どのようにすればよろしいのでしょうか?教えてください。お願いします。
- 締切済み
- Java
- 光テレビをご利用の際、専用チューナーからの接続方法は必要ですか?LANポートにLANケーブルを接続するだけでも大丈夫でしょうか?
- ひかりTVサービスやISPぷららをご利用の方にお伝えします。光テレビの接続方法についてご説明します。
- 光テレビを正しく接続するためには、専用チューナーを使用してONU本体に有線接続する必要があります。LANポートだけでなく、専用チューナーを使用することで光テレビの機能をフルに活用できます。
お礼
返事が遅くなって申し訳ないです。 なんとか、先生の助けを借りて、終わらせる事ができました。 ChateauAresもとても参考になりました。 ありがとうございました。