歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

N叉樹一 基本實現

丟了一次以前寫的算法的文檔和源代碼,Ubuntu One不可靠啊!只好從頭再寫一遍。

本文實現了一個樹,不是二叉樹,是N叉樹。也就是允許一個節點擁有多個子節點。

不是為了做題目糊弄人,所以內存管理不允許洩漏,用了C++11的shared_ptr。先看看調用代碼:

  1. #include <iostream>   
  2. #include <memory>   
  3.   
  4. using namespace std;  
  5.   
  6. #include "tree.h"   
  7. using namespace freebird;  
  8.   
  9.   
  10. using node_type = shared_ptr<node<int>>;  
  11. using node_iterator = vector<shared_ptr<node<int>>>::iterator;  
  12.   
  13. tree<node_type> t;  
  14.   
  15. void init(){  
  16.   node_type n1(new node<int>(1));  
  17.   t.root(n1);  
  18.   
  19.   node_type n2(new node<int>(2));  
  20.   node_type n3(new node<int>(3));  
  21.   node_type n4(new node<int>(4));  
  22.   
  23.   n1->push_back(n2);  
  24.   n1->push_back(n3);  
  25.   n1->push_back(n4);  
  26.   
  27. }  
  28.   
  29. void view_root(){  
  30.   node_type r = t.root();  
  31.   cout<<"the value of root:"<<r->value()<<endl;  
  32.   
  33.   node_iterator itor = r->begin();  
  34.   node_iterator last = r->end();  
  35.   for(;itor!=last;++itor){  
  36.     node_type cur_node = *itor;  
  37.     cout<<"the value of root's one child:"<<cur_node->value()<<endl;  
  38.   }  
  39.   
  40. }  
  41.   
  42. int main(int args,char* argv[]){  
  43.     
  44.   init();  
  45.   
  46.   view_root();  
  47.   
  48.   
  49.   
  50. }  
init函數初始化tree,放了一個根節點,然後加入三個子節點。

view_root將四個節點數據遍歷出來。

tree這個類看上去可有可無,其實不然。今後會將查找,遍歷等算法封裝在tree類裡面,方便使用。

注意using的用法,是C++11的template aliases。

  1. using node_type = shared_ptr<node<int>>;  
Copyright © Linux教程網 All Rights Reserved