、私は次のように定義されたバイナリツリーがあります。私のプログラムでこのポインタの算術演算が機能しないのはなぜですか?私のプログラムで
struct node {
char value;
struct node *left, *right;
};
を、私は、インデックスのために、各ノードの値の文字列を返す関数(上下を書き込もうとしています、右から左への走査)。そうする試みにおいて
は、私は次の関数を書かれている:それは動作するはずのよう
char *to_string_util(struct node *root, char *str) {
if (!root) return str;
*str++ = root->value;
// If not NULL
if (root->left) to_string_util(root->left, str);
if (root->right) to_string_util(root->right, str);
return str;
}
これがようだが、残念ながら、それはしていません。私はそれが動作しますが、別の変数の導入を必要とするので望ましくない配列の索引付けを使用して動作させるようにしました。ここで
は作品のバージョンは次のとおりです。
ツリーを考えるchar *to_string_util(struct node *root, char *str, int *cur_pos) {
if (!root) return str;
str[(*cur_pos)++] = root->value;
if (root->left) to_string_util(root->left, str, cur_pos);
if (root->right) to_string_util(root->right, str, cur_pos);
return str;
}
:
+
/ \
* *
/\ /\
a a b b
結果は次のようになります。注意すべき+*aa*bb
一つは、私は、この関数を呼び出すことですその最後にヌル文字を追加する別の関数ですが、出力には影響しないはずですが、言及する価値があると思いました。
なぜ2番目のバージョンは配列インデックスを使用していますが、最初の配列は機能しません。