完全2分木の表現の仕方についてです。
完全2分木の走査において
先行順
中間順
後行順
の3つを表現するプログラムをC++の配列を用いて表現したいです。
ポインタにおける、->left,->rightと同じようにやりたかったのですができませんでした。
どのようにすればそのように表現できるかを教えて欲しいです。
(コードは途中まで挑戦して挫折したものです。)
よろしくお願いします。
C++
1#include <stdio.h> 2#include <stdlib.h> 3 4#define MAX 15 /* 2分木の要素数の最大値 */ 5 6void sennkoujyun(char heap[], int i); 7void tyuukannjyun(char heap[], int i); 8void koukoujyun(char heap[], int i); 9 10int main(){ 11 12 /* 文字を要素とするヒープによる完全2分木 */ 13 char heap[MAX] = { 'a', 'b', 'c', 'd', 'e', 14 'f', 'g', 'h', 'i', 'j', 15 '\0', '\0', '\0', '\0', '\0' }; 16 17 preorder(heap, 0); 18 putchar('\n'); 19 return 0; 20} 21 22/* 先行順の評価でノードのラベルを印字する関数 */ 23void sennkoujyun(char heap[], int i){ 24 if( i >= MAX || heap[i] == '\0' ) return; 25 preorder(heap,2i+1); 26 printf("%c ",heap[i]); 27 preorder(heap,2i+2); 28 return; 29} 30 31/* 中間順の評価でノードのラベルを印字する関数 */ 32void tyuukannjyun(char heap[], int i){ 33 if( i >= MAX || heap[i] == '\0' ) return; 34 inorder(heap,2i+1); 35 printf("%c ",heap[i]); 36 return; 37} 38 39/* 後行順で評価でノードのラベルを印字する関数 */ 40void koukoujyun(char heap[], int i){ 41 if( i >= MAX || heap[i] == '\0' ) return; 42 postorder(heap,2i+1); 43 printf("%c ",heap[i]); 44 return; 45}
なんだか課題のひな形っぽい気が…。とりあえず、できなかった ->left,->right カクカクシカジカという部分だけのプログラムを作って考えてみてはどうですか?
回答1件
あなたの回答
tips
プレビュー