zoukankan      html  css  js  c++  java
  • 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();
    }

  • 相关阅读:
    通过ajax前端后台交互/登录页和注册页前端后台交互详解/前端后台交互基础应用/几个后台函数的基础应用/php文件函数基础应用/php字符传函数基础应用/php数组函数基础应用
    >>>---PHP中的OOP-->面对过程与面对对象基础概念与内容--(封装、继承、多态)
    基于HBuilder开发手机APP-主页/跳转页面/切换选项卡
    PHP基础学习
    JavaScript学习-js中的数组/Boolean类/字符串String类
    关于gulp中顺序执行任务
    AugularJS从入门到实践(三)
    AugularJS从入门到实践(二)
    用CSS实现响应式布局
    React+ANTD项目使用后的一些关于生命周期比较实用的心得
  • 原文地址:https://www.cnblogs.com/For-her/p/3370349.html
Copyright © 2011-2022 走看看