簡體   English   中英

二進制樹在c

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM