二进制树在c

时间:2011-02-04 02:55:00

标签: c tree binary-tree

enter image description here

伙计我是数据结构的新手。书籍和参考文献中的大部分时间我都看到了二叉树的这种结构

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

但在上面的图片中,它就像

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

所以我的问题是它是依赖于程序员来选择树节点的结构(例如还包括指向父节点的指针),或者我们只能有两个指针,一个指向左子节点,另一个指针指向父节点。正确的孩子。

4 个答案:

答案 0 :(得分:7)

是否包含父指针取决于您。它们需要更多的工作来维护,但是一些树操作(比如删除仅给定节点而不是父节点的节点)变得更容易。

答案 1 :(得分:1)

这取决于你。它们通常不是大多数树操作所必需的,但它们可以加速其中一些,但代价是存储额外链接所需的内存。在少数情况下,我必须自己写一个二叉树,我从未使用过父链接。

答案 2 :(得分:1)

如果没有特别说明的话,二叉树通常不包含指向父母的指针,如该图所示。当你以递归方式遍历树时,“指向父级的指针”通常隐式存储在堆栈中。

有一个更常见的变体 - “线程二叉树” - 在这种情况下,普通二进制树将具有NULL指针的叶节点改为按顺序指向下一个节点,而前一个节点在订购。这使您可以按正向或反向顺序遍历树,而无需递归。

答案 3 :(得分:0)

没有父节点的模型更适合递归的分治式算法[例如,预订或后序遍历]。对于更高级的操作,需要父指针。

你想做什么?