在我的節目,我有被定義二叉樹如下:這個指針算法爲什麼不起作用?
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
有一點要注意的是,我把這個功能另一個在它的末尾添加空字符的函數,它不應該影響輸出,但我認爲可能值得一提。
爲什麼使用數組索引的第二個版本工作但第一個版本沒有?