2011-02-04 236 views
2

enter image description here二叉樹

傢伙,我是新來的書籍和參考資料的時候我看到這個結構二叉樹

struct btree { 
    int data; 
    struct btree *left; 
    struct btree *right; 
}; 

但在上圖中這將是數據structures.Most像

struct btree 
{ 
    int data; 
    struct btree *left; 
    struct btree *right; 
    struct btree *parent; 
}; 

所以我的問題是它依賴於程序員在一個樹的節點的結構(例如,還包括一個指向父),或者我們也可以只有兩個POIN向左邊的孩子和向右邊的孩子傾斜。

+1

如果您永遠不需要向上遍歷,則包含父節點是沒有意義的。 – dreamlax 2011-02-04 02:57:29

回答

7

是否包含父指針取決於您。他們需要更多的工作來維護,但是某些樹操作(如刪除給定節點而不是其父節點的節點)變得更容易。

+0

你能不能告訴我如何構建一個完整的二叉樹。我無法解釋的是我們如何以BFS方式移動節點插入,因爲節點之間沒有鏈接。 – Algorithmist 2011-02-04 03:03:05

+0

@ yogi15490:你想如何在樹上移動?你可以使用子指針,有時也可以使用父指針,如果你已經包含它們的話。 – 2011-02-04 03:04:21

1

這取決於你。對於大多數樹操作而言,它們通常不是必需的,但它們可以加速其中的一些操作,但需要存儲額外鏈接所需的內存。在很少的情況下,我不得不自己編寫一個二叉樹,我從來沒有使用父鏈接。

1

如果沒有特別說明的話,二叉樹通常不包含父指針,如圖中所示。當您以遞歸方式遍歷樹時,「父指針」通常隱式地存儲在堆棧中。

還有一個相當常見的變體 - 「線程化二叉樹」 - 在這種情況下,葉子節點的普通二叉樹將具有NULL指針,而不是指向下一個節點的指針,而前一個節點爲了。這可以讓你以正向或反向順序遍歷樹,而無需遞歸。

0

沒有父節點的模型更適合遞歸分而治之風格的算法[例如,前序或後序遍歷]。對於更高級的操作,父指針是必需的。

你想做什麼?