今天做了一道題,發現須要返回根節點,不想多想。就上網搜了一下。發現當中提供的辦法都是須要使用父節點,事實上並不須要使用父節點。
僅僅須要使用遞迴函式返回值就能夠
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;輸出說明了改動了head指向的變數也就是變數p的值。void init(t* t)
void in(t* head)
}int main()
//輸出2 1 3
加引用事實上就是相當於傳指標的效果,看以下
#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;輸入以0結尾;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()
建立二叉排序樹
建立二叉排序樹 1 建立二叉排序樹,二叉樹排序樹有個特點,如果結點值大於根,則在右子樹去查詢插入位置,如果小於樹根,在左子樹去查詢樹根,如果相等,不作任何操作 2 根據上面的特性,需要兩個結點,分別是當前結點和父節點 3 先遍歷二叉樹節點,找到要插入的位置,根據父節點的指向要插入的位置 實現過程如下...
關於二叉排序樹
二叉排序樹定義 二叉排序樹或者是一顆空樹,或者具有以下性質 若左子樹不空,則左子樹上所有節點均小於根節點的值,若右子樹不為空,則右子樹上所有節點值均大於根節點的值,它的左右子樹也分別為二叉排序樹。通常情況下,可用二叉鍊錶作為二叉排序樹的儲存結構。注意 二叉排序樹的中序遍歷就是從小到大的有序序列 ty...
二叉排序樹的建立
首先二叉排序樹的查詢,這裡father用於記錄訪問點的前序,如果找到關鍵字,也就是程式中的e,則p指向這個結點,而father則指向p的父結點,如果沒有找到關鍵字,則father指向查詢路徑上的最後乙個結點,也可以理解為要插入的結點 關鍵插入father的左子樹或者右子樹 typedef struc...