解題心得
在 insert function 要回傳 tree node 這邊卡超久,一開始沒加,還想說為什麼都沒被更新到。
後來才搞清楚丟到function裡的是a copy of pointer,兩個指標指到同樣的位置(此處為null),如果要有預期的行為,就需要把function裡的pointer更新回去。 同理,動到left node跟right node也要接收遞迴函式的回傳值。
比對以前寫的類似的程式,才恍然大悟為什麼以前會用class寫──因為就不是copy一份過去了。
程式碼
#include <iostream> using namespace std; struct Node { int data; Node* left; Node* right; }; Node* insert(Node* tree, int val) { if (tree == NULL) { tree = new Node; tree->data = val; tree->left = tree->right = NULL; } else { if (val < tree->data) tree->left = insert(tree->left, val); else tree->right = insert(tree->right, val); } return tree; } void printPreorder(Node* tree) { if (tree == NULL) return; cout << tree->data << " "; printPreorder(tree->left); printPreorder(tree->right); } int main() { int n, temp; while (cin >> n) { Node* root = NULL; while (n--) { cin >> temp; root = insert(root, temp); } printPreorder(root); cout << endl; } return 0; }
沒有留言:
張貼留言