MIT6.828——Lab2(麻省理工作業系統實驗)
阿新 • • 發佈:2021-11-01
放棄很容易,但是堅持真的很酷,靜享此刻,強風吹拂namespace chen { template <typename T> class Tree { public: Tree(const T& val):val_(val){} T value() const {return val_;} Tree** left() {return &left_;} Tree** right() {return &right_;} private: T val_; Tree* left_; Tree* right_; }; // Tree // 向Tree結構新增節點 template <typename T> Tree<T>* addVal(Tree<T>* node, const T& val) { if (node == nullptr) { node = new Tree<T>(val); return node; } if (node->value() > val) *node->left() = addVal(*node->left(), val); else *node->right() = addVal(*node->right(), val); return node; } // 列印Tree節點 template <typename T> void printTree(Tree<T>* root) { if (root) { printTree(*root->left()); cout << root->value() << endl; printTree(*root->right()); } } // 釋放節點 template <typename T> void freeTree(Tree<T>** root) { if (*root) { freeTree((*root)->left()); freeTree((*root)->right()); cout << "free node, value:" << (*root)->value() << endl; delete *root; *root = nullptr; } } } // namespace chen void treeTest() { vector<int> nums = { 12, 21, 9, 108, 87, 34, 9, 11, 48, 77, 987, 245, 1, 43, 56, 88, 120, 34, 61 }; chen::Tree<int>* root = 0; for (int i : nums) { root = chen::addVal(root, i); } printTree(root); vector<string> words = { "chen", "xie", "and", "wang", "qing", "liu", "dang", "keai", "sad", "happend", "happy", "nice", "you", "joker", "kobe", "and", "or", "test", "fucking", "listen", "accept" }; chen::Tree<string>* node = 0; for (const string& item : words) { node = addVal(node, item); } printTree(node); freeTree(&node); freeTree(&root); cout << "-----------------------------------------" << endl; printTree(root); printTree(node); }