程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> c++-如何用類實現二叉樹的操作?

c++-如何用類實現二叉樹的操作?

編輯:編程解疑
如何用類實現二叉樹的操作?

如何用類實現二叉樹的創建,遍歷。該類的私密成員為樹的根節點。

最佳回答:


 #include<iostream.h>
struct tree
{
    int data;
    tree *left,*right;
};
class Btree
{
    static int n;
    static int m;
public:
    tree *root;
    Btree()
    {
        root=NULL;
    }
    void create_Btree(int);
    void Preorder(tree *);                  //先序遍歷
    void inorder(tree *);                   //中序遍歷
    void Postorder(tree *);                 //後序遍歷
    void display1() {Preorder(root); cout<<endl;}
    void display2() {inorder(root);cout<<endl;}
    void display3() {Postorder(root); cout<<endl;}  
    int count(tree *);                      //計算二叉樹的個數
    int findleaf(tree *);                   //求二叉樹葉子的個數
    int findnode(tree *);                   //求二叉樹中度數為1的結點數量,這是當初考數據結構時候的最後一道題目
};                                          
int Btree::n=0;
int Btree::m=0;
void Btree::create_Btree(int x)
{
    tree *newnode=new tree;
    newnode->data=x;
    newnode->right=newnode->left=NULL;
    if(root==NULL)
        root=newnode;
    else
    {
        tree *back;
        tree *current=root;
        while(current!=NULL)
        {
            back=current;
            if(current->data>x)
                current=current->left;
            else
                current=current->right;
        }
        if(back->data>x)
            back->left=newnode;
        else
            back->right=newnode;
    }
}
int Btree::count(tree *p)
{
    if(p==NULL)
        return 0;
    else
        return count(p->left)+count(p->right)+1;      //這是運用了函數嵌套即遞歸的方法。
}
void Btree::Preorder(tree *temp)    //這是先序遍歷二叉樹,采用了遞歸的方法。
{
    if(temp!=NULL)
    {
        cout<<temp->data<<" ";
        Preorder(temp->left);
        Preorder(temp->right);
    }
}
void Btree::inorder(tree *temp)      //這是中序遍歷二叉樹,采用了遞歸的方法。
{
    if(temp!=NULL)
    {
        inorder(temp->left);
        cout<<temp->data<<" ";
        inorder(temp->right);
    }
}
void Btree::Postorder(tree *temp)     //這是後序遍歷二叉樹,采用了遞歸的方法。
{
    if(temp!=NULL)
    {
        Postorder(temp->left);
        Postorder(temp->right);
        cout<<temp->data<<" ";
    }
}
int Btree::findleaf(tree *temp)
{
    if(temp==NULL)return 0;
    else
    {
        if(temp->left==NULL&&temp->right==NULL)return n+=1;
        else
        {
            findleaf(temp->left);
            findleaf(temp->right);
        }
        return n;
    }
}
int Btree::findnode(tree *temp)
{
    if(temp==NULL)return 0;
    else
    {
        if(temp->left!=NULL&&temp->right!=NULL)
        {
            findnode(temp->left);
            findnode(temp->right);
        }
        if(temp->left!=NULL&&temp->right==NULL)
        {
            m+=1;
            findnode(temp->left);
        }
        if(temp->left==NULL&&temp->right!=NULL)
        {
            m+=1;
            findnode(temp->right);
        }
    }
    return m;
}


void main()
{
    Btree A;
    int array[]={7,4,2,3,15,35,6,45,55,20,1,14,56,57,58};
    int k;
    k=sizeof(array)/sizeof(array[0]);
    cout<<"建立排序二叉樹順序: "<<endl;
    for(int i=0;i<k;i++)
    {
        cout<<array[i]<<" ";
        A.create_Btree(array[i]);
    }
    cout<<endl;
    cout<<"二叉樹節點個數: "<<A.count(A.root)<<endl;
    cout<<"二叉樹葉子個數:"<<A.findleaf(A.root)<<endl;
    cout<<"二叉樹中度數為1的結點的數量為:"<<A.findnode(A.root)<<endl;
    cout<<endl<<"先序遍歷序列: "<<endl;
    A.display1();
    cout<<endl<<"中序遍歷序列: "<<endl;
    A.display2();
    cout<<endl<<"後序遍歷序列: "<<endl;
    A.display3();
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved