zoukankan      html  css  js  c++  java
  • 二叉搜索树

    对应HDU3791

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <cstdlib>
    #include <algorithm>
    #include <vector>
    #include <stack>
    #include <queue>
    #include <cassert>
    #include <set>
    #include <sstream>
    #include <map>
    using namespace std ;
    #ifdef DeBUG
    #define bug assert
    #else
    #define bug //
    #endif
    #define zero {0}
    #define INF 2000000000
    #define eps 1e-6
    typedef struct _Node //二叉树类,n保存变量
    {
        int n;
        struct _Node *lf;
        struct _Node *rt;
    } Node,*pNode; //定义pNode 为指针变量
    int cmp(pNode a,pNode b)//两棵二叉树的比较,传入根节点,相同为1,不同为0
    {
        if(!a||!b)
        {
            if(a==b)
                return 1;
            else
                return 0;
        }
        if(a->n!=b->n)return 0;
        if(!cmp(a->lf,b->lf))
            return 0;
        if(!cmp(a->rt,b->rt))
            return 0;
        return 1;
    }
    void insert(pNode h,int e)//建树,e为变量
    {
        if(e<h->n)
        {
            if(h->lf==0)
            {
                h->lf=(pNode)malloc(sizeof(Node));
                h->lf->n=e;
                h->lf->lf=h->lf->rt=0;
            }
            else
                insert(h->lf,e);
        }
        else
        {
            if(h->rt==0)
            {
                h->rt=(pNode)malloc(sizeof(Node));
                h->rt->n=e;
                h->rt->lf=h->rt->rt=0;
            }
            else
                insert(h->rt,e);
        }
    }
    void del(pNode h)//删除一棵
    {
        if(!h)return ;
        del(h->lf);
        del(h->rt);
        free(h);
    }
    int main()
    {
    #ifdef DeBUG
        freopen("C:\Users\Sky\Desktop\1.in","r",stdin);
    #endif
        int i,j,n,l,ll;
        char seq[11];
        Node tgt,src;
        while(scanf("%d",&n),n)
        {
            getchar();
            gets(seq);
            l=strlen(seq);
            src.n=seq[0]-48;//根节点的初始化 
            src.lf=src.rt=0;//左右初始化为0 
            for(i=1; i<l; i++)
                insert(&src,seq[i]-48);
            for(i=0; i<n; i++)
            {
                gets(seq);
                ll=strlen(seq);
                if(ll!=l)
                    break;
                tgt.n=seq[0]-48;
                tgt.lf=tgt.rt=0;
                for(j=1; j<ll; j++)
                    insert(&tgt,seq[j]-48);
                if(cmp(&src,&tgt))
                    printf("YES
    ");
                else
                    printf("NO
    ");
                del(tgt.lf);
                del(tgt.rt);
            }
            del(src.lf);//注意删除格式 
            del(src.rt);
        }
        return 0;
    }
    View Code

    模板

    typedef struct _Node //二叉树类,n保存变量
    {
        int n;
        struct _Node *lf;
        struct _Node *rt;
    } Node,*pNode; //定义pNode 为指针变量
    int cmp(pNode a,pNode b)//两棵二叉树的比较,传入根节点,相同为1,不同为0
    {
        if(!a||!b)
        {
            if(a==b)
                return 1;
            else
                return 0;
        }
        if(a->n!=b->n)return 0;
        if(!cmp(a->lf,b->lf))
            return 0;
        if(!cmp(a->rt,b->rt))
            return 0;
        return 1;
    }
    void insert(pNode h,int e)//建树,e为变量
    {
        if(e<h->n)
        {
            if(h->lf==0)
            {
                h->lf=(pNode)malloc(sizeof(Node));
                h->lf->n=e;
                h->lf->lf=h->lf->rt=0;
            }
            else
                insert(h->lf,e);
        }
        else
        {
            if(h->rt==0)
            {
                h->rt=(pNode)malloc(sizeof(Node));
                h->rt->n=e;
                h->rt->lf=h->rt->rt=0;
            }
            else
                insert(h->rt,e);
        }
    }
    void del(pNode h)//删除一棵
    {
        if(!h)return ;
        del(h->lf);
        del(h->rt);
        free(h);
    }
    int main()
    {
        Node tgt,src;
        
        src.n=x;//根节点的初始化
        src.lf=src.rt=0;//左右初始化为0
        insert(&src,变量);
        
        tgt.n=y;
        tgt.lf=tgt.rt=0;
        insert(&tgt,变量);
        
        if(cmp(&src,&tgt))
            printf("YES
    ");
        else
            printf("NO
    ");
            
        del(tgt.lf);
        del(tgt.rt);
        
        del(src.lf);//注意删除格式
        del(src.rt);
        
        return 0;
    }
    View Code

     二叉树类

    作者http://blog.csdn.net/qq276592716/article/details/7402040

      1 #include <iostream.h>
      2 #define max 10
      3 struct BinTreeNode                                                                             //二叉查找树的节点结构体
      4 {
      5     int m_data;
      6     struct BinTreeNode *lchild, *rchild;
      7     BinTreeNode(int item, BinTreeNode *left = NULL, BinTreeNode *right = NULL)
      8         : m_data(item), lchild(left), rchild(right)  //构造函数默认的lchild,rchild为NULL
      9     {
     10     }
     11 };
     12 
     13 class  BinaryTree                                                                       //二叉搜索树类
     14 {
     15 
     16 private:
     17     BinTreeNode *root;   //根节点指针
     18 
     19 public:
     20     BinaryTree()
     21     {
     22         root = NULL;
     23     }
     24     
     25  //迭带插入的方法建二叉搜索树
     26     void Insert(const int node)                                                
     27     {                                     
     28         BinTreeNode *currentpointer;        //当前节点指针  
     29         BinTreeNode *parentpointer;         //父亲节点指针    
     30         BinTreeNode *newpointer; 
     31         //ptr必须为根节点指针的引用
     32         BinTreeNode *ptr = root;
     33         newpointer = new BinTreeNode(node); //新动态分配一个节点
     34 
     35         if(root == NULL)    //如果此时树为空,返回新开辟的节点
     36         {
     37             root = newpointer;
     38         }
     39         else
     40         {
     41             currentpointer = ptr;        //保存root指针
     42    //一直移动到是使parentpointer指向叶子节点而currentpointer为NULL
     43             while(currentpointer != NULL)    //当当前节点不为空的情况下
     44             {
     45                 parentpointer = currentpointer; //用指向父亲节点的指针保存当前指针
     46 
     47                 if(currentpointer->m_data > node)
     48                 {
     49                     currentpointer = currentpointer->lchild;
     50                 }
     51                 else
     52                 {
     53                     currentpointer = currentpointer->rchild;
     54                 }
     55             }
     56             //以下是将节点插入
     57             if(parentpointer->m_data > node)
     58             {
     59                 parentpointer->lchild = newpointer;
     60             }
     61             else
     62             {
     63                 parentpointer->rchild = newpointer;
     64             }
     65         }
     66     }
     67 
     68  //创建方法,依次插入
     69     BinTreeNode *Creat(int data[],int len) 
     70     {
     71         for(int i=0; i<len; i++)
     72         {
     73             Insert(data[i]);
     74         }
     75         return root;
     76     }
     77     
     78     void PreOrder()
     79     {
     80         cout<<"前序遍历的结果为:";
     81         PrePrint(root);
     82     }
     83 
     84     void InOrder()
     85     {
     86         cout<<"中序遍历的结果为:";
     87         InPrint(root);
     88     }
     89 
     90     void PostOrder()
     91     {
     92         cout<<"后序遍历的结果为:";
     93         PostPrint(root);
     94     }
     95 
     96     void Count()
     97     {
     98         cout<<endl;
     99         cout<<"叶子节点数为:"<<CountLeafs(root)<<endl;
    100     }
    101 
    102     void PrePrint(BinTreeNode *p) //前序遍历
    103     {
    104         if(p != NULL)
    105         {
    106             cout << p->m_data << ',';
    107             PrePrint(p->lchild);
    108             PrePrint(p->rchild);
    109         }
    110     }
    111 
    112     void InPrint(BinTreeNode *p)  //中序遍历
    113     {
    114         if(p != NULL)
    115         {
    116             InPrint(p->lchild);
    117             cout<< p->m_data<<',';
    118             InPrint(p->rchild);
    119         }
    120     }
    121     
    122     
    123     void PostPrint(BinTreeNode *p)  //后序遍历
    124     {
    125         if(p != NULL)
    126         {
    127             PostPrint(p->lchild);
    128             PostPrint(p->rchild);
    129             cout<< p->m_data<< ',';
    130         }
    131     }
    132 
    133     BinTreeNode * Find(const int &c)  //用迭带的方法寻找特定的节点
    134     {
    135         BinTreeNode *pCurrent = root;
    136         if(pCurrent  != NULL)
    137         {
    138             while(pCurrent  != NULL)
    139             {
    140                 if(pCurrent->m_data == c)
    141                 {
    142                     return pCurrent;
    143                 }
    144                 else 
    145                 {
    146                     if(c > pCurrent->m_data)
    147                         pCurrent  = pCurrent->rchild;
    148                     else
    149                         pCurrent  = pCurrent ->lchild;
    150                 }
    151             }
    152         }
    153         return NULL;
    154     }
    155     
    156     bool DeleteBT(const int &key)   //删除节点的函数定义
    157     {
    158         BinTreeNode *q, *s;
    159         BinTreeNode *current = root; //找到要删除的节点
    160         BinTreeNode *prt = NULL;    //current的父亲节点
    161 
    162         while ((NULL != current) && (current->m_data != key))
    163                                    //通过查找找到值为key的节点和它的父亲节点
    164         {
    165             prt = current;
    166               
    167              if (current->m_data > key)
    168                      current = current->lchild;
    169              else
    170                      current = current->rchild;
    171         }
    172 
    173         if(current == NULL) //current为NULL说明节点不存在
    174         {
    175             cout<<"没有此节点!"<<endl;
    176             return false;
    177         }
    178         if(current->lchild == NULL && current->rchild == NULL)
    179                        //当找到的节点即没有左孩子也没有右孩子
    180         {
    181             if(current == root)
    182             {
    183                 root = NULL;
    184             }
    185             else 
    186             {
    187                 if(current == prt->lchild)
    188                 {
    189                     prt->lchild = NULL;
    190                 }
    191                 else
    192                 {
    193                     prt->rchild = NULL;
    194                 }
    195             }
    196         }
    197         if(current->lchild == NULL && current->rchild != NULL)
    198                         //当找到的节点有右孩子而没有左孩子
    199         {
    200             if(current == root)
    201             {
    202                 current = current->rchild;
    203             }
    204             else 
    205             {
    206                 if(current == prt->lchild)  //如果当前节点是prt指向节点的左孩子
    207                 {
    208                     prt->lchild = current->rchild;
    209                 }
    210                 else
    211                 {
    212                     prt->rchild = current->rchild;
    213                 }
    214             }
    215         }
    216         if(current->rchild == NULL && current->lchild != NULL) 
    217                                         //如果当前节点有左孩子而没有右孩子
    218         {
    219             if(current == root)
    220             {
    221                 current = current->lchild;
    222             }
    223             else
    224             {
    225                 if(current == prt->lchild)
    226                 {
    227                     prt->lchild = current->lchild;
    228                 }
    229                 else
    230                 {
    231                     prt->rchild = current->lchild;
    232                 }
    233             }
    234         }
    235 
    236         if(current ->lchild != NULL && current->rchild != NULL)//当前节点左右孩子都有
    237         {
    238             q = current;    //用q保存current节点指针
    239             s = current;    //s是current的前驱指针
    240 
    241             current = current->lchild;
    242             //先向左走
    243             while(current->rchild) //然后向右走到尽头,其实就是寻找左子树当中最大的节点
    244             {                      //补充:寻找右子树当中最小的节点也是可以的
    245                 s = current;       //s指向current的前驱
    246                 current = current->rchild;
    247             }
    248 
    249             q->m_data = current->m_data;  //用找到的节点替换当前节点
    250         
    251             if(q != s)                    //将current节点从树中拆下来
    252                 s->rchild = current->lchild;
    253             else
    254                 q->lchild = current->lchild;
    255         }
    256         delete current;        //释放current指向的空间
    257         current = NULL;
    258         return true;
    259     }
    260 
    261     void destroy(BinTreeNode *current) //销毁二叉树
    262     {
    263         if(current != NULL)
    264         {
    265             destroy(current->lchild);
    266             destroy(current->rchild);
    267             delete current;
    268             current = NULL;
    269         }
    270     }
    271 
    272     int CountLeafs(BinTreeNode *current)
    273     {
    274         if(current == NULL)
    275         {
    276             return 0;
    277         }
    278         else 
    279         {
    280             if( current->lchild == NULL  &&  current->rchild == NULL )
    281             {
    282                 return 1;
    283             }
    284             else
    285             {
    286                 int num1 = CountLeafs(current->lchild);
    287                 int num2 = CountLeafs(current->rchild);
    288                 return (num1+num2);
    289             }
    290         }
    291     }
    292 
    293     virtual  ~BinaryTree() 
    294     {
    295         destroy(root);
    296     }
    297 };
    298 void main()
    299 {
    300     BinaryTree myTree;
    301     int a[]={6, 3, 4, 7, 8, 2, 5, 9, 0, 1};
    302  //输出
    303  cout<<"(1)输出部分:"<<endl;
    304     myTree.Creat(a, max);  //创建二叉搜索树
    305     myTree.PreOrder();     //先序遍历
    306  cout<<endl;
    307     myTree.InOrder();      //中序遍历
    308  cout<<endl;
    309     myTree.PostOrder();    //后序遍历
    310  cout<<endl<<endl;
    311  //插入
    312  cout<<"(2)插入部分:"<<endl;
    313  int x;
    314  cout<<"输入你想要插入的节点:";
    315  cin>>x;
    316  myTree.Insert(x);
    317  myTree.InOrder();      //中序遍历
    318     cout<<endl<<endl;
    319 
    320  //删除
    321  cout<<"(3)删除部分:"<<endl;
    322     cout<<"输入一个你想删除的节点: ";
    323     cin>>x;
    324     if(myTree.DeleteBT(x))  //进行删除
    325         cout<<"删除成功!"<<endl;
    326     else
    327         cout<<"删除失败!"<<endl;
    328     myTree.InOrder();      //中序遍历
    329  cout<<endl<<endl;
    330 
    331  //查询
    332  cout<<"(4)查询部分:"<<endl;
    333  cout<<"输入你想要找的节点";
    334     cin>>x;
    335     if(myTree.Find(x))     //进行查找
    336         cout<<"查找成功!"<<endl;
    337     else
    338         cout<<"查找失败!"<<endl;
    339 }
    View Code

     自写二叉排序树

      1 #include <iostream>
      2 #include <queue>
      3 #include <stack>
      4 using namespace std;
      5 #define MAX 10
      6 struct BinTreeNode
      7 {
      8     int m_data;
      9     BinTreeNode *lchild,*rchild;
     10     BinTreeNode(int item,BinTreeNode *left=NULL,BinTreeNode *right=NULL)
     11         :m_data(item),lchild(left),rchild(right) {}
     12 };
     13 class BinaryTree
     14 {
     15     private:
     16         BinTreeNode *root;
     17     public:
     18         BinaryTree()
     19         {
     20             root=NULL;
     21         }
     22         BinTreeNode *GetRoot()
     23         {
     24             return root;
     25         }
     26         void Insert(const int node)
     27         {
     28             BinTreeNode *currentpointer;
     29             BinTreeNode *parentpointer;
     30             BinTreeNode *newpointer;
     31             BinTreeNode *ptr = root;
     32             newpointer = new BinTreeNode(node);
     33             if(root==NULL)
     34             {
     35                 root=newpointer;
     36             }
     37             else
     38             {
     39                 currentpointer=ptr;
     40                 while(currentpointer!=NULL)
     41                 {
     42                     parentpointer=currentpointer;
     43                     if(currentpointer->m_data>node)
     44                     {
     45                         currentpointer=currentpointer->lchild;
     46                     }
     47                     else
     48                     {
     49                         currentpointer=currentpointer->rchild;
     50                     }
     51                 }
     52                 if(parentpointer->m_data>node)
     53                 {
     54                     parentpointer->lchild=newpointer;
     55                 }
     56                 else
     57                 {
     58                     parentpointer->rchild=newpointer;
     59                 }
     60             }
     61         }
     62         BinTreeNode *Creat(int data[],int len)
     63         {
     64             for(int i=0; i<len; i++)
     65             {
     66                 Insert(data[i]);
     67             }
     68             return root;
     69         }
     70         void PreOrder(BinTreeNode *p)
     71         {
     72             if(p!=NULL)
     73             {
     74                 cout<<p->m_data<<',';
     75                 PreOrder(p->lchild);
     76                 PreOrder(p->rchild);
     77             }
     78         }
     79         void PreOrder2(BinTreeNode *p)//非递归版
     80         {
     81             stack<BinTreeNode*>S;
     82             S.push(p);
     83             while(!S.empty())
     84             {
     85                 p=S.top();
     86                 while(p)
     87                 {
     88                     cout<<p->m_data<<',';
     89                     S.push(p->lchild);
     90                     p=p->lchild;
     91                 }
     92                 S.pop();
     93                 if(!S.empty())
     94                 {
     95                     p=S.top();
     96                     S.pop();
     97                     S.push(p->rchild);
     98                 }
     99             }
    100             
    101         }
    102         void InOrder(BinTreeNode *p)
    103         {
    104             if(p!=NULL)
    105             {
    106                 InOrder(p->lchild);
    107                 cout<<p->m_data<<',';
    108                 InOrder(p->rchild);
    109             }
    110         }
    111         void InOrder2(BinTreeNode *p)//非递归版
    112         {
    113             stack<BinTreeNode*>S;
    114             S.push(p);
    115             while(!S.empty())
    116             {
    117                 p=S.top();
    118                 while(p)
    119                 {
    120                     S.push(p->lchild);
    121                     p=p->lchild;
    122                 }
    123                 S.pop();
    124                 if(!S.empty())
    125                 {
    126                     p=S.top();
    127                     S.pop();
    128                     cout<<p->m_data<<',';
    129                     S.push(p->rchild);
    130                 }
    131             }
    132             
    133         }
    134         void PostOrder(BinTreeNode *p)
    135         {
    136             if(p!=NULL)
    137             {
    138                 PostOrder(p->lchild);
    139                 PostOrder(p->rchild);
    140                 cout<<p->m_data<<',';
    141             }
    142         }
    143         void layerOrder(BinTreeNode *p)
    144         {
    145             if(p!=NULL)
    146             {
    147                 queue<BinTreeNode *>st;
    148                 st.push(p);
    149                 while(!st.empty())
    150                 {
    151                     BinTreeNode*now=st.front();
    152                         st.pop();
    153                     cout<<now->m_data<<',';
    154                     if(now->lchild!=NULL)
    155                     {
    156                         st.push(now->lchild);
    157                     }
    158                     if(now->rchild!=NULL)
    159                     {
    160                         st.push(now->rchild);       
    161                     }   
    162                 }
    163             }
    164         }
    165         BinTreeNode *Find(const int &c)
    166         {
    167             BinTreeNode *pCurrent =root;
    168             if(pCurrent!=NULL)
    169             {
    170                 while(pCurrent!=NULL)
    171                 {
    172                     if(pCurrent->m_data==c)
    173                     {
    174                         return pCurrent;
    175                     }
    176                     else
    177                     {
    178                         if(c > pCurrent->m_data)
    179                             pCurrent=pCurrent->rchild;
    180                         else
    181                             pCurrent=pCurrent->lchild;
    182                     }
    183                 }
    184             }
    185             return NULL;
    186         }
    187         bool DeleteBT(const int &key)
    188         {
    189             BinTreeNode *q,*s;
    190             BinTreeNode *current=root;
    191             BinTreeNode *prt=NULL;
    192             while((NULL!=current)&&(current->m_data!=key))
    193             {
    194                 prt=current;
    195                 if(current->m_data>key)
    196                     current=current->lchild;
    197                 else
    198                     current=current->rchild;
    199             }
    200             if(current==NULL)
    201             {
    202                 cout<<"没有此节点"<<endl;
    203                 return false;
    204             }
    205             //删除叶子节点
    206             if(current->lchild==NULL&&current->rchild==NULL)
    207             {
    208                 if(current==root)
    209                 {
    210                     root=NULL;
    211                 }
    212                 else
    213                 {
    214                     if(current==prt->lchild)
    215                     {
    216                         prt->lchild=NULL;
    217                     }
    218                     else
    219                     {
    220                         prt->rchild=NULL;
    221                     }
    222                 }
    223             }
    224             //右边有人
    225             if(current->lchild==NULL&&current->rchild!=NULL)
    226             {
    227                 if(current==root)
    228                 {
    229                     current=current->rchild;
    230                 }
    231                 else
    232                 {
    233                     if(current==prt->lchild)
    234                     {
    235                         prt->lchild=current->rchild;
    236                     }
    237                     else
    238                     {
    239                         prt->rchild=current->rchild;
    240                     }
    241                 }
    242             }
    243             //左边有人
    244             if(current->rchild==NULL&&current->lchild!=NULL)
    245             {
    246                 if(current==root)
    247                 {
    248                     current=current->lchild;
    249                 }
    250                 else
    251                 {
    252                     if(current==prt->lchild)
    253                     {
    254                         prt->lchild=current->lchild;
    255                     }
    256                     else
    257                     {
    258                         prt->rchild=current->lchild;
    259                     }
    260                 }
    261             }
    262             //两边都有人
    263             if(current->lchild!=NULL&&current->rchild!=NULL)
    264             {
    265                 q=current;
    266                 s=current;
    267                 current=current->lchild;
    268                 while(current->rchild)
    269                 {
    270                     s=current;
    271                     current=current->rchild;
    272                 }
    273                 q->m_data=current->m_data;
    274                 if(q!=s)
    275                     s->rchild=current->lchild;
    276                 else
    277                     q->lchild=current->lchild;
    278             }
    279             delete current;
    280             current=NULL;
    281             return true;
    282         }
    283         void destroy(BinTreeNode *current)
    284         {
    285             if(current!=NULL)
    286             {
    287                 destroy(current->lchild);
    288                 destroy(current->rchild);
    289                 delete current;
    290                 current = NULL;
    291             }
    292         }
    293         ~BinaryTree()
    294         {
    295             destroy(root);
    296         }
    297         int CountLeafs(BinTreeNode *current)//叶子节点
    298         {
    299             if(current==NULL)
    300             {
    301                 return 0;
    302             }
    303             else
    304             {
    305                 if(current->rchild==NULL&&current->rchild==NULL)
    306                 {
    307                     return 1;
    308                 }
    309                 else
    310                 {
    311                     int num1=CountLeafs(current->lchild);
    312                     int num2=CountLeafs(current->rchild);
    313                     return num1+num2;
    314                 }
    315             }
    316         }
    317 
    318         int Depth(BinTreeNode *current)//深度
    319         {
    320             int Depthleft;
    321             int Depthright;
    322             int dp=0;
    323             if(current==NULL)
    324             {
    325                 return 0;
    326             }
    327             else
    328             {
    329                 Depthleft=Depth(current->lchild);
    330                 Depthright=Depth(current->rchild);
    331                 dp=1+(Depthright>=Depthleft ? Depthright:Depthleft);
    332             }
    333             return dp;
    334         }
    335         BinTreeNode *Copy(BinTreeNode *tree)
    336         {
    337             BinTreeNode *pleft;
    338             BinTreeNode *pright;
    339             if(!tree)
    340             {
    341                 return NULL;
    342             }
    343             if(tree->lchild!=NULL)
    344             {
    345                 pleft=Copy(tree->lchild);
    346             }
    347             else
    348             {
    349                 pleft=NULL;
    350             }
    351             if(tree->rchild!=NULL)
    352             {
    353                 pright=Copy(tree->rchild);
    354             }
    355             else
    356             {
    357                 pright=NULL;
    358             }
    359             BinTreeNode *cptree=new BinTreeNode(tree->m_data,pleft,pright);
    360             root=cptree;
    361             return cptree;
    362         }
    363 };
    364 int main()
    365 {
    366     BinaryTree myTree;
    367     int a[]= {6, 3, 4, 7, 8, 2, 5, 9, 0, 1};
    368     /*
    369          6
    370         / 
    371        3   7
    372       /    
    373      2   4   8
    374     /        
    375    0       5   9
    376     
    377      1
    378     */
    379     myTree.Creat(a, MAX);  //创建二叉搜索树
    380     cout<<"先序遍历";myTree.PreOrder(myTree.GetRoot());cout<<endl;
    381     cout<<"中序遍历";myTree.InOrder(myTree.GetRoot());cout<<endl;
    382     cout<<"后序遍历";myTree.PostOrder(myTree.GetRoot());cout<<endl;
    383     cout<<"层序遍历";myTree.layerOrder(myTree.GetRoot());cout<<endl;
    384 
    385     cout<<"非递归先序遍历";myTree.PreOrder2(myTree.GetRoot());cout<<endl;
    386     cout<<"非递归中序遍历";myTree.InOrder2(myTree.GetRoot());cout<<endl;
    387 
    388     cout<<"树深度";cout<<myTree.Depth(myTree.GetRoot())<<endl;
    389     cout<<"叶子节点数";cout<<myTree.CountLeafs(myTree.GetRoot())<<endl;
    390     BinaryTree copyTree;//新建复制树
    391     copyTree.Copy(myTree.GetRoot());
    392     cout<<"复制树先序遍历";copyTree.PreOrder(copyTree.GetRoot());
    393     cout<<"复制树深度"<<copyTree.Depth(copyTree.GetRoot())<<endl;
    394 }
    View Code
  • 相关阅读:
    LOJ.2721.[NOI2018]屠龙勇士(扩展CRT 扩展欧几里得)
    Codeforces.959E.Mahmoud and Ehab and the xor-MST(思路)
    BZOJ.3058.四叶草魔杖(Kruskal 状压DP)
    Codeforces.838E.Convex Countour(区间DP)
    Codeforces.838D.Airplane Arrangements(思路)
    Codeforces.997C.Sky Full of Stars(容斥 计数)
    Codeforces.786B.Legacy(线段树优化建图 最短路Dijkstra)
    BZOJ.3759.Hungergame(博弈论 线性基)
    LOJ.2718.[NOI2018]归程(Kruskal重构树 倍增)
    序列化二叉树
  • 原文地址:https://www.cnblogs.com/Skyxj/p/3236793.html
Copyright © 2011-2022 走看看