私のプログラムが要素をどのように挿入するかを視覚化するのは難しいです。私は悲しげに理解し、それがツリー内の要素を置く方法を視覚化することができません完全にバランスの取れたツリー内の要素の順序
int arr[] = { 3, -2, 11, 7, 12, 1, 4, 5, 33, 13 };
int n = 10;
int cnt = 0;
typedef struct node*po;
struct node {
int data;
po left;
po right;
};
po ibd(int n) {
po holder;
if (n>0) {
int nl = n/2;
int nr = n - nl - 1;
holder = new node;
holder->data = arr[cnt++];
holder->left = ibd(nl);
holder->right = ibd(nr);
return holder;
}
else {
return NULL;
}
}
: はここに先生が私たちに与えたコードです。私はそれが再帰的分割と征服アルゴリズムを使用して2つの部分に分割し、要素を追加することを理解することができますが、どの要素がルートになるのか理解できません。すべてが挿入された後、ツリーがどのように見えるかを誰かが視覚化するのを助けることができますか?
+--------------+---------------+
| Data |
+--------------+---------------+
| Pointer to | Pointer to |
| left subtree | right subtree |
+--------------+---------------+
私は別のノードのポイントを作るとき、私は新しいノードに適切なleft
またはright
ポインタからの矢印を使用します。木を扱う場合
デバッガでコードをステップ実行し、デバッガの機能を確認する必要があります。 – NathanOliver
C++タグではなく、この質問にcタグを使用することを検討する必要があります。 –
教師の関数の署名が 'po ibd(int n)'の場合、コードの明快さの未来を恐れます。 – Drax