丟了一次以前寫的算法的文檔和源代碼,Ubuntu One不可靠啊!只好從頭再寫一遍。
本文實現了一個樹,不是二叉樹,是N叉樹。也就是允許一個節點擁有多個子節點。
不是為了做題目糊弄人,所以內存管理不允許洩漏,用了C++11的shared_ptr。先看看調用代碼:
- #include <iostream>
- #include <memory>
-
- using namespace std;
-
- #include "tree.h"
- using namespace freebird;
-
-
- using node_type = shared_ptr<node<int>>;
- using node_iterator = vector<shared_ptr<node<int>>>::iterator;
-
- tree<node_type> t;
-
- void init(){
- node_type n1(new node<int>(1));
- t.root(n1);
-
- node_type n2(new node<int>(2));
- node_type n3(new node<int>(3));
- node_type n4(new node<int>(4));
-
- n1->push_back(n2);
- n1->push_back(n3);
- n1->push_back(n4);
-
- }
-
- void view_root(){
- node_type r = t.root();
- cout<<"the value of root:"<<r->value()<<endl;
-
- node_iterator itor = r->begin();
- node_iterator last = r->end();
- for(;itor!=last;++itor){
- node_type cur_node = *itor;
- cout<<"the value of root's one child:"<<cur_node->value()<<endl;
- }
-
- }
-
- int main(int args,char* argv[]){
-
- init();
-
- view_root();
-
-
-
- }
init函數初始化tree,放了一個根節點,然後加入三個子節點。
view_root將四個節點數據遍歷出來。
tree這個類看上去可有可無,其實不然。今後會將查找,遍歷等算法封裝在tree類裡面,方便使用。
注意using的用法,是C++11的template aliases。
- using node_type = shared_ptr<node<int>>;