C語言-二叉樹-建立問題:指標的指標
阿新 • • 發佈:2018-11-27
自己動手寫二叉樹的建立時出現了一個問題
#include <stdio.h>
#include <stdlib.h>
typedef struct _BinNode BinNode;
struct _BinNode{
char ch;
BinNode * left;
BinNode * right;
};
void CreateNode(BinNode * binNode){
char ch;
scanf("%c",&ch);
if(ch=='*'){
binNode=NULL;
}
else {
binNode=(BinNode*)malloc(sizeof(BinNode));
binNode->ch=ch;
CreateNode(binNode->left);
CreateNode(binNode->right);
}
}
void PreShow(BinNode *binNode){
if(!binNode){
return;
}
else{
printf("%c",binNode->ch);
PreShow(binNode->left);
PreShow(binNode->right);
}
}
int main(){
BinNode * binNode;
printf("請輸入二叉樹前序遍歷結果:");
CreateNode(binNode);
printf("前序遍歷結果:");
PreShow(binNode);
return 0;
}
這樣寫貌似沒什麼問題,但是執行結果卻不能達到預期所想
通過debug發現二叉樹沒有建立好,核實了一遍程式碼,也沒有什麼邏輯問題,最後對照原始碼發現了的問題
原始碼用的是指標的指標**CreateNode(BinNode binNode)
於是百思不得其解,一層指標就可以解決問題,最後在看了幾篇文章
自己動手再寫的時候發現了問題:
函式對指標進行修改,如果引數為指標,那麼傳遞的是指標的副本,真正的指標並沒有修改,就像swap(int a ,int b)不能交換a,b的值一個道理
對於函式修改指標的值,引數應當是指標的指標才行,就如同swap(int* a,int* b)一個道理
這是修改後的程式碼
#include <stdio.h>
#include <stdlib.h>
typedef struct _BinNode BinNode;
struct _BinNode{
char ch;
BinNode * left;
BinNode * right;
};
//指標的指標
void CreateNode(BinNode ** binNode){
char ch;
scanf("%c",&ch);
if(ch=='*'){
*binNode=NULL;
}
else{
*binNode=(BinNode*)malloc(sizeof(BinNode));
(*binNode)->ch=ch;
CreateNode(&(*binNode)->left);
CreateNode(&(*binNode)->right);
}
}
void PreShow(BinNode *binNode){
if(!binNode){
return;
}
else{
printf("%c",binNode->ch);
PreShow(binNode->left);
PreShow(binNode->right);
}
}
int main(){
BinNode * binNode;
printf("請輸入二叉樹前序遍歷結果:");
CreateNode(&binNode);
printf("前序遍歷結果:");
PreShow(binNode);
return 0;
}
執行結果