樹的c++實現--建立一棵樹


在學習二分查找樹的時候,在遞歸的問題上遇到不少的問題,在這里和大家分享一下自己的學習過程

我在學習樹的知識的時候,沒有把樹當做一個類,只把一個結點當做一個類。樹的實現都在函數中,如果大家有興趣可以試試在一個類中實現樹

為了方便起見,這不同模板,結點的值用整數型

結點類的設計:

  結點類中包含一個表示該節點值的val變量,和指向左結點和指向右結點的指針。這三者構成了一個簡單的結點

1 class Node{
2 public:
3     int val;
4     Node *left, *right;
5     Node(){right = NULL; left = NULL;}
6 };   

建立一棵樹主要通過遞歸來實現

 1 Node* build(Node* root, int val){
 2       if(root == NULL){
 3            root = new Node();
 4            root->val = val;
 5            return root;
 6       }
 7       if(val < root->val) root->left = build(root->left, val);
 8      else if(val > root->val) root->right = build(root->right, val);
 9      return root;
10 }

 

這里我們用一個函數levelOrder() 來驗證我們的樹是否正確的建立。該函數是按層遍歷樹的結點,輸出每個結點的值。實現過程在后面的博客會詳細的說,現在

直接拿來用就行啦。

 1 void levelOrder(Node* root){
 2     queue<Node*> q;
 3     q.push(root);
 4     while(!q.empty()){
 5         Node *temp = q.front();
 6         q.pop();
 7         cout<<temp->val<<" ";
 8         if(temp->left) q.push(temp->left);
 9         if(temp->right) q.push(temp->right);
10     }
11 }
12 int main(){
13     Node *root = NULL;
14     int t[] = {5,4,6,3,7};
15     for(int i = 0; i < 5; i++) root = build(root, t[i]);
16     levelOrder(root);
17 return 0;}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM