[英]Binary Trees in c
伙計我是數據結構的新手。大多數時候在書籍和參考書中我看到這個結構的二叉樹
struct btree {
int data;
struct btree *left;
struct btree *right;
};
但在上面的圖像中它會是這樣的
struct btree
{
int data;
struct btree *left;
struct btree *right;
struct btree *parent;
};
所以我的問題是它依賴於程序員來選擇樹節點的結構(例如還包括指向父節點的指針)或者我們只能有兩個指針,一個指向左邊的子節點,另一個指向右邊的子節點。
是否包含父指針取決於您。 它們需要更多的工作來維護,但是一些樹操作(比如刪除僅給定該節點而不是其父節點的節點)變得更容易。
由你決定。 它們通常不是大多數樹操作所必需的,但它們可以加速其中一些,但代價是存儲額外鏈接所需的內存。 在少數情況下,我必須自己寫一個二叉樹,我從未使用過父鏈接。
如果沒有特別說明的話,二叉樹通常不包含指向父母的指針,如該圖所示。 當您以遞歸方式遍歷樹時,“指向父級的指針”通常隱式存儲在堆棧中。
有一個更常見的變體 - “線程二叉樹” - 在這種情況下,普通二進制樹將具有NULL指針的葉節點改為按順序指向下一個節點,並按順序指向前一個節點。 這使您可以按正向或反向順序遍歷樹,而無需遞歸。
沒有父節點的模型更適合遞歸的分治式算法[例如,預訂或后序遍歷]。 對於更高級的操作,需要父指針。
你想做什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.