建立树的两种方法以及用广义表显示树

一种是先序建树,一种是层序建树(自己瞎起的名字,呵呵)

1.先序建树(string用来以广义表形式显示树)

void CreateBTREE(BTREE & BT ,string & lists)
{
    cout <<"\n请输入节点信息(‘#’表示为空)\n" ;
    type data ;
    cin >> data  ;
    lists+=data ;
    if(data == '#')
    {
        BT = NULL ;
    }
    else
    {
        BT = new node ;
        BT->data = data ;
        lists+="("  ;
        cout <<"\n输入"<<data <<"的左节点:\n" ;
        CreateBTREE(BT->lChild,lists) ;
        lists+="," ;
        cout <<"\n输入"<<data<<"的右节点:\n" ;
        CreateBTREE(BT->rChild,lists) ;
        lists+=")" ;
    }
}


 

 2.层序建树

void CreateBTREE(BTREE & BT)
{
     for(int i = 0 ; i < MAX_SIZE ; i++)
     {
          tmp[i] = NULL ; 
     }
     while(cout <<"\n请输入节点序号和数据(输入0 0结束建树):\n") 
     {
          int order ; 
          type val ; 
          cin >>order >> val ;
          if(order == 0 && val == '0')
          {
              break ;   
          }
          else if(order <= 0)
          {
               cout <<"\n不合法的节点序号,序号应大于等于1 \n" ; 
              continue ; 
          }
          node * newNode = new node ; 
          newNode->val = val ; 
          newNode->lChild = NULL ; 
          newNode->rChild = NULL ; 
          if(order == 1)
          {
               BT  = newNode ; 
               tmp[1] = BT ; 
          }
          else
          {
               int parentNode = order/2 ; 
               if(tmp[parentNode] == NULL)
               {
                    cout <<"\n不合法的节点序号,新节点必须是前面某个节点的儿子 \n" ; 
                    delete newNode ; 
                    continue ; 
               }
               else
               {
                    //存储
                    tmp[order] = newNode ; 
                    //建树
                    if(order%2 == 0)
                         tmp[parentNode]->lChild = tmp[order] ; 
                    else
                    tmp[parentNode]->rChild = tmp[order] ; 
                    
               }
               
          }
     }
     
}


 

你可能感兴趣的:(建立树的两种方法以及用广义表显示树)