[問題] C 二元樹新增資料

看板Programming作者 (nagey28)時間6年前 (2018/05/01 04:18), 編輯推噓2(201)
留言3則, 3人參與, 6年前最新討論串1/1
我在新增二元樹資料的時候新增的前兩筆資料可以進去 可是到第三筆資料的時候root的內容卻不見了 想問一下我是哪個地方打錯Orz struct Tree { int data; struct Tree *left; struct Tree *right; }; typedef struct Tree *tree; ------------------------------------------------------ int main() { int n=0; tree root=NULL; while(n!=-1) { printf("二元樹的 1)新增 2)搜尋 3)中序印出 4)後序印出 5)深度 -1)離開 :"); scanf("%d",&n); switch(n) { case 1: add(&root); break; ------------------------------------------------------- void add(tree *root)//新增 { int num; tree runptr=*root; tree tempptr=NULL; tree newdata=(tree)malloc(sizeof(Tree)); printf("輸入數字:"); scanf("%d",&num); if(runptr==NULL) { newdata->data=num; newdata->left=NULL; newdata->right=NULL; *root=newdata; } else { while(runptr!=NULL)//跑完後runptr會等於NULL tempptr等於runptr的上一個節點 { tempptr=runptr; if(num>runptr->data)//右移 runptr=runptr->right; else if(num<runptr->data)//左移 runptr=runptr->left; } if(num>tempptr->data)//放右邊 { tempptr->right=newdata; newdata->data=num; newdata->left=NULL; newdata->right=NULL; } else if(num<tempptr->data)//放左邊 { tempptr->left=newdata; newdata->data=num; newdata->left=NULL; newdata->right=NULL; } } free(runptr); free(tempptr); } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.13.23.248 ※ 文章網址: https://www.ptt.cc/bbs/Programming/M.1525119529.A.59E.html

05/01 12:53, 6年前 , 1F
free時機
05/01 12:53, 1F

05/01 14:46, 6年前 , 2F
一開始的 root 沒有實體!
05/01 14:46, 2F

05/10 03:37, 6年前 , 3F
add裡面應該不用free吧,會有uaf問題
05/10 03:37, 3F
文章代碼(AID): #1QvtefMU (Programming)
文章代碼(AID): #1QvtefMU (Programming)