二叉鏈表產生二叉樹

來源:互聯網
上載者:User

把常式敲一遍       才對二叉樹有了個基本的認識    

完整正確常式:

#include <iostream>#include<stdlib.h>using namespace std;//二叉樹出的二叉鏈表結構定義struct bitnode{    char data;    bitnode *lchild,*rchild;};bitnode *t;//bitree==*bitnode//前序走訪遞迴void preordertraverse(bitnode *t){    if(t==NULL)        return ;    cout<<t->data;    preordertraverse(t->lchild);    preordertraverse(t->rchild);}//二叉樹的中序遍曆遞迴void inordertraverse(bitnode *t){    if(t==NULL)        return ;    inordertraverse(t->lchild);    cout<<t->data;    inordertraverse(t->rchild);}//二叉樹後序遍曆遞迴void postordertraverse(bitnode *t){    if(t==NULL)        return ;    postordertraverse(t->lchild);    postordertraverse(t->rchild);    cout<<t->data;}//按前序輸入二叉樹中結點的值(一個字元)//#表示空樹,構造二叉鏈表表示二叉樹t《大話資料結構》void createbitree(bitnode *(*t)){    char ch;    cin>>ch;    if(ch=='#')        (*t)=NULL;    else    {        (*t)=new bitnode;        //if(!t)           // exit(0);        (*t)->data=ch;        createbitree(&(*t)->lchild);//構造左子樹        createbitree(&(*t)->rchild);//構造右子樹    }}int main(){cout<<"請輸入全部結點(null 指標用#代替):"<<endl;    createbitree(&t);cout<<"\n\n先序遍曆"<<endl;inordertraverse(t);cout<<"\n中序遍曆"<<endl;    preordertraverse(t);cout<<"\n後序遍曆"<<endl;postordertraverse(t); cout<<endl;    return 0;}

下面是運行結果:

錯誤的建樹函數:

錯誤原因是:參數有單向傳遞的特點,修改後的data無法傳遞到主函數中

void createbitree(bitnode *t){    char ch;    cin>>ch;    if(ch=='#')        t=NULL;    else    {        t=new bitnode;        //if(!t)           // exit(0);        t->data=ch;        createbitree(t->lchild);//構造左子樹        createbitree(t->rchild);//構造右子樹    }}*/

修改指標的值:二級指標,引用,傳回值(返回修改後的指標)

////////////////////1傳引用/////////////////////////////  /*在主函數中定義樹,然後傳到createbitree中void createbitree(bitnode &t){    char ch;    cin>>ch;    if(ch=='#')        t=NULL;    else    {        t=new bitnode;        //if(!t)           // exit(0);        t->data=ch;        createbitree(t->lchild);//構造左子樹        createbitree(t->rchild);//構造右子樹    }}main函數中改為:createbitree(t);  2 //////////////////傳回值////////////////////////////////:  /*直接在函數中定義樹;bitnode * createbitree(){   bitnode *t;    char ch;    cin>>ch;    if(ch=='#')        t=NULL;    else    {        t=new bitnode;        //if(!t)           // exit(0);        t->data=ch;        createbitree(t->lchild);//構造左子樹        createbitree(t->rchild);//構造右子樹  }  return t;}  主函數:createbitree();*///按前序輸入二叉樹中結點的值(一個字元)//#表示空樹,構造二叉鏈表表示二叉樹t《大話資料結構》void createbitree(bitnode *(*t)){    char ch;    cin>>ch;    if(ch=='#')       (*t)=NULL;    else    {        (*t)=new bitnode;        //if(!t)           // exit(0);        (*t)->data=ch;        createbitree(&(*t)->lchild);//構造左子樹        createbitree(&(*t)->rchild);//構造右子樹    }}

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.