程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 遍歷-一個二叉樹的建立,不知道哪裡錯了呢

遍歷-一個二叉樹的建立,不知道哪裡錯了呢

編輯:編程解疑
一個二叉樹的建立,不知道哪裡錯了呢
 void create(BiTree *T) {
    char ch;
    scanf("%c",&ch);
    if(ch=='#')
        *T = NULL;
    else {
        *T = (BiTree)malloc(sizeof(BiNode));
        if(*T) {
            (*T)->data = ch;
            create(&(*T)->lchild);
            create(&(*T)->rchild);
        }
        else return ;
    }
}

上面是正確的代碼
為什麼不能用下面的這片???

void create(BiTree T) {
    char ch;
    scanf("%c",&ch);
    if(ch=='#')
        T = NULL;
    else {
        T = (BiTree)malloc(sizeof(BiNode));
        if(T) {
            T->data = ch;
            create(T->lchild);
            create(T->rchild);
        }
        else return ;
    }
} 

最佳回答:


之前的void create(BiTree T)這裡,T是形式參數傳進去的,在create的子函數裡進行的操作,是對形式參數的操作,子函數結束時就都釋放了,不會返回到主函數
void create(BiTree *T)這裡,用到了指針指向T的地址,相當於對T的地址的操作,是一直有效的
也可以寫成(BiTree *&T)下面都用T
這裡涉及C語言指針的相關知識

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved