1. 程式人生 > 其它 >MIT6.828——Lab2(麻省理工作業系統實驗)

MIT6.828——Lab2(麻省理工作業系統實驗)

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);
}
放棄很容易,但是堅持真的很酷,靜享此刻,強風吹拂