關於二叉排序樹樹建立並返回根節點

2022-07-27 23:15:20 字數 1326 閱讀 8289

今天做了一道題,發現須要返回根節點,不想多想。就上網搜了一下。發現當中提供的辦法都是須要使用父節點,事實上並不須要使用父節點。

僅僅須要使用遞迴函式返回值就能夠

struct  t;

t* init(t* &t)

return t;

}

建立二叉排序樹

struct t;

t* insert(t* &t,int data)

else if(t->x>data)insert(t->lchild,data);

else if(t->xrchild,data);

return t;

}t* init(t* &t)

這裡介紹一下指標,指標的引用。

函式引數的傳遞的是傳值,指標由於傳的是位址。所以形參與實參共同指向乙個變數,改動形參的值,變數的值也就得到了改動

#include struct t;

void init(t* t)

void in(t* head)

}int main()

//輸出2 1 3

輸出說明了改動了head指向的變數也就是變數p的值。

加引用事實上就是相當於傳指標的效果,看以下

#include void fun(int &x,int y,int* z)

int main()

/*1 2 3

4 2 6

process returned 0 (0x0) execution time : 0.169 s

press any key to continue.

*/

改動了第乙個和第三個的值,那麼就能夠理解為引用就是指標的便捷方式。

#include struct t;

void init(t* &t)

void in(t* head)

}int main()

//沒引用輸出28ff10 28ff10

//有引用輸出28ff14 0

所以在資料結構課程中遞迴建立樹中(如第一段**)假設沒有加引用那麼在遞迴函式的第一層中會改動樹根的值x,在呼叫建立子樹的時候由於根節點的孩子儲存的是^,那麼在函式呼叫的時候僅僅是傳入了^,  改動了^所指向的內容,也就當然沒用了。

不用引用動態建樹

#include struct t;

void init(t* t,int e)

if(t->xrchild;}

}if(t->x>e)

else

}void in(t* t)

}int main()

輸入以0結尾;

建立二叉排序樹

建立二叉排序樹 1 建立二叉排序樹,二叉樹排序樹有個特點,如果結點值大於根,則在右子樹去查詢插入位置,如果小於樹根,在左子樹去查詢樹根,如果相等,不作任何操作 2 根據上面的特性,需要兩個結點,分別是當前結點和父節點 3 先遍歷二叉樹節點,找到要插入的位置,根據父節點的指向要插入的位置 實現過程如下...

關於二叉排序樹

二叉排序樹定義 二叉排序樹或者是一顆空樹,或者具有以下性質 若左子樹不空,則左子樹上所有節點均小於根節點的值,若右子樹不為空,則右子樹上所有節點值均大於根節點的值,它的左右子樹也分別為二叉排序樹。通常情況下,可用二叉鍊錶作為二叉排序樹的儲存結構。注意 二叉排序樹的中序遍歷就是從小到大的有序序列 ty...

二叉排序樹的建立

首先二叉排序樹的查詢,這裡father用於記錄訪問點的前序,如果找到關鍵字,也就是程式中的e,則p指向這個結點,而father則指向p的父結點,如果沒有找到關鍵字,則father指向查詢路徑上的最後乙個結點,也可以理解為要插入的結點 關鍵插入father的左子樹或者右子樹 typedef struc...