關於二叉樹樹的建立過程中的引數傳遞問題

時間 2021-09-15 00:12:00

1樓:庾妙夢

傳遞地址主要是考慮如下:

防止沒有初始化的空指標的傳遞,雖然傳遞指標相當於傳遞地址,但是null指標就不起作用了.

比如,你第一次傳遞指標,它沒有初始化,也就沒有一個地址對應,你傳遞了它,其實沒有什麼用,當然如果你要它有作用也可以,就是返回值為它本身,用它來接收這個返回的指標.

2樓:匿名使用者

我不知道說的對不對哦~這是我的理解,描述上不是太精確。

void createtree(btnode * &b)其實是可以寫做

void createtree(btnode *b)的,

這裡的createtree(btnode *b)是指引數為指標型變數,若要在函式體中對呼叫的引數進行修改的話,需要加上「*」表示對其指向的地址資料進行修改(因為指標變數本身存放的資料是地址)如果不加「*」就是說要對這個指標指向的資料進行修改。

比如你提供的**段中的b=null,目的是為了修改當前指標的指向,在這裡(指函式體定義為createtree(btnode *b)的時候)就得寫作*b=null,這裡的*b指的是指標b所存放的那個代表指向地址的資料。

函式定義為createtree(btnode * &b),可以這樣理解:我的引數是一個指標地址,我在函式體內對它的修改就是直接修改了實參所指向的地址。所以不需要再加上「*」,而可以直接寫作b=null。

其實此時的b就等於上面那種情況的「*b」;

這樣寫的好處,我個人理解是:使**看上去更清晰。因為在這裡只涉及到更改連結串列的指向。

至於有沒有其他的原因,我不是很清楚。

你可以參看譚浩強的《c程》或者是《c++程》,指標一章,其實只要區分一下*p 和&p代表的含義就清楚了。

希望有所幫助。

關於資料結構中遞迴建立二叉樹時出現了問題

3樓:帛高爽

createbt(t->lchild);

createbt(t->rchild);

這兩句應該是

t->lchild=createbt();

t->rchild=createbt();

這樣吧最後多輸入幾個空格試試看?就輸入部分來看,應該沒有很大的問題

4樓:半季流年

#include "stdio.h"

#include "malloc.h"

#include "stdlib.h"

typedef char telemtype;

typedef struct btnbtn ,*bt;

//已經跟你說過了,不能返回區域性指標!而且你的原程式中createbt函式的引數和呼叫時不一致!

void createbt(bt &t)//為了方便,這裡我用了引用型別

else

}else

}void preordert(bt t )

}void inordert(bt t)

}void postordert(bt t)

}bt locateelem(bt t , telemtype e)

}int btnum(bt t)

int btdepth(bt t)

return h;

}void main()

printf("是否繼續操作?(y/n):");

scanf("%c",&ch);//這裡的變數應該是字元型別,你的原程式中用的是整型!

getchar();

}while(ch!='y');

}二叉樹建立函式我已經驗證了,沒什麼問題,其它的函式都沒動。

這種創立二叉樹的方法,為何形式引數前要加一個 & ????求解

5樓:匿名使用者

該符號表示引用,即在傳遞函式形參時,不會發生記憶體拷貝,直接在原有二叉樹的基礎上根據鍵盤輸入的字元來建立二叉樹!如果傳遞的不是引用,由於你的函式的返回植是代表建立的結果,函式執行後,你的二叉樹的內容是不會改變的!

6樓:匿名使用者

加上&,實參和形參的值會保持一致

關於遞迴演算法求二叉樹深度演算法,關於求二叉樹深度的遞迴演算法

int height bitree t if 中的n應該是v。其思想是,一個節點的深度是他的兩個子節點中深度的最大值再加上1。這個演算法中u得到其左子數的深度,v獲得右子樹的深度。則這個節點的深度就是u和v中最大的再加上1。要想獲得樹的深度,就先獲得這個樹中根節點的兩個兒子的深度,比較兩個兒子的深度...

二叉樹後續線索樹的問題,後序後繼線索二叉樹中找後繼的集中情況

後序遍歷 若二叉樹非空,則依次執行如下操作 遍歷左子樹 遍歷右子樹 訪問根結點。所以從根結點開始 樹的判斷都是從根開始 如這裡的a,這裡有左右子樹b c,但是在訪問b的時候,發現b有左子樹d,所以d比b先,d有左子樹e e有右子樹f,所以f比e先,e比d先,訪問完b後,訪問c,c有右子樹g,先訪問g...

線索二叉樹的插入有幾種情況,線索二叉樹的插入和刪除

娜莉 向線索二叉樹插入一個新節點時,必須修改插入位置原有的前驅 後繼線索,使得整個原有的線索化關係不但能夠保留,而且新節點插入後也能正確保持這種關係。以中序線索二叉樹為例,如果新節點r作為節點s的右子女插入,要依據s的rightchild域是線索還是右子女指標來決定不同的處理方式。同理,新節點r作為...