• C++ 二叉树的实现


      1 #include<iostream.h>
      2 struct tree
      3 {
      4     int data;
      5     tree *left,*right;
      6 };
      7 class Btree
      8 {
      9     static int n;
     10     static int m;
     11 public:
     12     tree *root;
     13     Btree()
     14     {
     15         root=NULL;
     16     }
     17     void create_Btree(int);
     18     void Preorder(tree *);                  //先序遍历
     19     void inorder(tree *);                   //中序遍历
     20     void Postorder(tree *);                 //后序遍历
     21     void display1() {Preorder(root); cout<<endl;}
     22     void display2() {inorder(root);cout<<endl;}
     23     void display3() {Postorder(root); cout<<endl;}  
     24     int count(tree *);                      //计算二叉树的个数
     25     int findleaf(tree *);                   //求二叉树叶子的个数
     26     int findnode(tree *);                   //求二叉树中度数为1的结点数量,这是当初考数据结构时候的最后一道题目
     27 };                                          
     28 int Btree::n=0;
     29 int Btree::m=0;
     30 void Btree::create_Btree(int x)
     31 {
     32     tree *newnode=new tree;
     33     newnode->data=x;
     34     newnode->right=newnode->left=NULL;
     35     if(root==NULL)
     36         root=newnode;
     37     else
     38     {
     39         tree *back;
     40         tree *current=root;
     41         while(current!=NULL)
     42         {
     43             back=current;
     44             if(current->data>x)
     45                 current=current->left;
     46             else
     47                 current=current->right;
     48         }
     49         if(back->data>x)
     50             back->left=newnode;
     51         else
     52             back->right=newnode;
     53     }
     54 }
     55 int Btree::count(tree *p)
     56 {
     57     if(p==NULL)
     58         return 0;
     59     else
     60         return count(p->left)+count(p->right)+1;      //这是运用了函数嵌套即递归的方法。
     61 }
     62 void Btree::Preorder(tree *temp)    //这是先序遍历二叉树,采用了递归的方法。
     63 {
     64     if(temp!=NULL)
     65     {
     66         cout<<temp->data<<" ";
     67         Preorder(temp->left);
     68         Preorder(temp->right);
     69     }
     70 }
     71 void Btree::inorder(tree *temp)      //这是中序遍历二叉树,采用了递归的方法。
     72 {
     73     if(temp!=NULL)
     74     {
     75         inorder(temp->left);
     76         cout<<temp->data<<" ";
     77         inorder(temp->right);
     78     }
     79 }
     80 void Btree::Postorder(tree *temp)     //这是后序遍历二叉树,采用了递归的方法。
     81 {
     82     if(temp!=NULL)
     83     {
     84         Postorder(temp->left);
     85         Postorder(temp->right);
     86         cout<<temp->data<<" ";
     87     }
     88 }
     89 int Btree::findleaf(tree *temp)
     90 {
     91     if(temp==NULL)return 0;
     92     else
     93     {
     94         if(temp->left==NULL&&temp->right==NULL)return n+=1;
     95         else
     96         {
     97             findleaf(temp->left);
     98             findleaf(temp->right);
     99         }
    100         return n;
    101     }
    102 }
    103 int Btree::findnode(tree *temp)
    104 {
    105     if(temp==NULL)return 0;
    106     else
    107     {
    108         if(temp->left!=NULL&&temp->right!=NULL)
    109         {
    110             findnode(temp->left);
    111             findnode(temp->right);
    112         }
    113         if(temp->left!=NULL&&temp->right==NULL)
    114         {
    115             m+=1;
    116             findnode(temp->left);
    117         }
    118         if(temp->left==NULL&&temp->right!=NULL)
    119         {
    120             m+=1;
    121             findnode(temp->right);
    122         }
    123     }
    124     return m;
    125 }
    126 
    127 
    128 void main()
    129 {
    130     Btree A;
    131     int array[]={7,4,2,3,15,35,6,45,55,20,1,14,56,57,58};
    132     int k;
    133     k=sizeof(array)/sizeof(array[0]);
    134     cout<<"建立排序二叉树顺序: "<<endl;
    135     for(int i=0;i<k;i++)
    136     {
    137         cout<<array[i]<<" ";
    138         A.create_Btree(array[i]);
    139     }
    140     cout<<endl;
    141     cout<<"二叉树节点个数: "<<A.count(A.root)<<endl;
    142     cout<<"二叉树叶子个数:"<<A.findleaf(A.root)<<endl;
    143     cout<<"二叉树中度数为1的结点的数量为:"<<A.findnode(A.root)<<endl;
    144     cout<<endl<<"先序遍历序列: "<<endl;
    145     A.display1();
    146     cout<<endl<<"中序遍历序列: "<<endl;
    147     A.display2();
    148     cout<<endl<<"后序遍历序列: "<<endl;
    149     A.display3();
    150 }
  • 相关阅读:
    dataset的transformations-变形记
    创建dataset的方法
    Codeforces Round #479 (Div. 3) D. Divide by three, multiply by two
    Codeforces Round #479 (Div. 3) C. Less or Equal
    Codeforces Round #479 (Div. 3) B. Two-gram
    Codeforces Round #479 (Div. 3) A. Wrong Subtraction
    GlitchBot -HZNU寒假集训
    Floyd 算法求多源最短路径
    dijkstra算法:寻找到全图各点的最短路径
    Wooden Sticks -HZNU寒假集训
  • 原文地址:https://www.cnblogs.com/elleniou/p/2480042.html
Copyright © 2020-2023  润新知