プロが教える店舗&オフィスのセキュリティ対策術

課題で「2分探索木にデータを挿入する手続きを定義し、作った木を中順になぞって出力せよ」というのが出されました。
      6
     /  \
    4    7
    /     \
   2      9
    \   /  \
    3   8   10
           \
           11
              \
             12
このような木を考えプログラムを組み実行できたのですが、結果が「2,3,4,6,7,8,9,10,11,12」となってしまいます。中順だと「3,2,4,6,8,9,12,11,10,7」のはずなので合いません。
どこがおかしいのかご指摘お願いします。

ソースは以下の通りです。

program tree_search (input,output);

type elementtype = integer;
pointertype = ^celltype;
celltype = record
element : elementtype;
leftson : pointertype;
rightson: pointertype
end;
var root : pointertype;

procedure inorder( node:pointertype);
begin
if (node <> nil) then
begin
inorder( node^.leftson);
write( node^.element);
inorder( node^.rightson)
end
end; {中順になぞる}

procedure insert( x:integer; var p:pointertype);
begin
if ( p = nil) then
begin
new( p );
p^.element := x;
p^.leftson := nil;
p^.rightson := nil
end
else if ( x < p^.element ) then
insert( x,p^.leftson)
else if ( x > p^.element ) then
insert( x,p^.rightson)
end; {木に挿入する}

procedure create( var p:pointertype );
begin
p:= nil
end; {空の木を作る}

begin
create(root);
insert( 6,root );
insert( 4,root );
insert( 2,root );
insert( 3,root );
insert( 7,root );
insert( 9,root );
insert( 8,root );
insert( 10,root );
insert( 11,root );
insert( 12,root );
inorder( root )
end.

A 回答 (1件)

中順、とは通りがけのことでしょうか?


だとすると、通りがけによる探索結果は
ノードのデータを昇順(または降順)に
出力します。
得られた結果は正しいです。

ちなみに、通りがけ以外の探索結果は下記のとおりです。
行きがけ
6, 4, 2, 3, 7, 9, 8, 10, 11, 12
帰りがけ
3, 2, 4, 8, 12, 11, 10, 9, 7, 6

> 「3,2,4,6,8,9,12,11,10,7」のはず

これは、当該の二分木を探索して得られる
いずれの結果にも当てはまりません。
    • good
    • 1
この回答へのお礼

ありがとうございました、私の勘違いでしたか(^^;)

お礼日時:2008/01/08 01:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!