void Weight_BN(BiTree t,int deep) //求二叉樹的寬度 //int CC[20]={0}; int Flag=-1; CC[],Flag為全域變數
{
if(t)
{
printf("%c\t",t->data);
CC[deep]++;
printf("CC[deep]:\t%d\n",CC[deep]);
if(Flag<CC[deep])
Flag=CC[deep];
Weight_BN(t->lchild,++deep);
Weight_BN(t->rchild,++deep);
}
}
void Weight_BN(BiTree t,int deep) //求二叉樹的寬度 //int CC[20]={0}; int Flag=-1; CC[],Flag為全域變數
{
if(t)
{
printf("%c\t",t->data);
CC[deep]++;
printf("CC[deep]:\t%d\n",CC[deep]);
if(Flag<CC[deep])
Flag=CC[deep];
Weight_BN(t->lchild,deep+1);
Weight_BN(t->rchild,deep+1);
}
}
這是一個遞回求二叉樹寬度的問題。我就疑惑為什么++deep和deep+1出來的結果不一樣。deep+1是對的,++deep是錯的。
uj5u.com熱心網友回復:
看起來這兒蘇湖是沒有問題,你可以在函式入口輸出一下deep的值看看,看兩種情況下有什么差別uj5u.com熱心網友回復:
++deep,deep本身改變,deep+1,deep本身不改變。uj5u.com熱心網友回復:
Weight_BN(t->lchild,deep+1);//這里如果是++deepWeight_BN(t->rchild,deep+1);//這里的deep就是會是上一個函式引數加一,也就是沒有遍歷同一層的資料,因此出錯。
uj5u.com熱心網友回復:
可是,++deep的話并沒用到指標,遞回不是系統內部堆疊嗎,如果沒通過指標的話,++deep從下一層回傳的話,deep的值不應該會回來嗎。遍歷同一層的話,比如第一層是A,deep是1,然后遞回呼叫到下一層的B,deep自增1,deep是2,再假設B的下一層是C,++deep不應該到了3嗎。然后分別對應CC[deep]的值應該也變化啊,如果在遞回回去,deep不是指標的話,B對應的deep不應該還是2嗎,可是我測驗了一下好像不是。誒,我感覺我知識好匱乏。
uj5u.com熱心網友回復:
像這個++k,就沒事,可是到了樹里面就不行了
uj5u.com熱心網友回復:
因為只有一個ma。uj5u.com熱心網友回復:
如果還不明白?那拿個具體的數來說:
比如: deep=1;
Weight_BN(t->lchild,deep+1);
Weight_BN(t->rchild,deep+1);
相當于
Weight_BN(t->lchild,2);
Weight_BN(t->rchild,2);
============================
Weight_BN(t->lchild,++deep);
Weight_BN(t->rchild,++deep);
相當于
Weight_BN(t->lchild,2);
Weight_BN(t->rchild,3);
uj5u.com熱心網友回復:
有一點懂了,那如果下層再嵌套呼叫,會不會是這樣
Weight_BN(t->lchild,++deep);
Weight_BN(t->rchild,++deep);
Weight_BN(t->lchild,2);
{
Weight_BN(t->lchild,4);
Weight_BN(t->rchild,5)
}
Weight_BN(t->rchild,3)
{
Weight_BN(t->lchild,6);
Weight_BN(t->rchild,7)
}會這樣嗎
uj5u.com熱心網友回復:
計算機學科,往好里說是一個比較嚴謹的學科,不好里說它比較死性,差一點都不成。你多一個分號,一個字母,一個括號,它都會認為你是錯誤的。所以,不能體會這樣的細微差別的人,我的意見是,最好不要入行。你不太適合這個行業。
uj5u.com熱心網友回復:
受教了,感謝批評
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/67768.html
標籤:C語言
