繁体   English   中英

C中二叉树中内部和外部节点的表示

[英]Representation of internal and external nodes in binary tree in C

我正在阅读Tannenbaum的C和C ++数据结构。 以下是本书的文字片段

非叶节点称为内部节点,叶称为外部节点。 当仅定义单一类型的节点时,通常使用该术语。 当然,必须将内部节点内的子指针标识为指向内部和外部节点。 这可以通过两种方式完成:

  1. 一种技术是声明两种不同的节点类型和指针类型,并为内部节点使用union,每个替换包含两种指针类型之一。
  2. 其他技术是保留单一类型的指针和单一类型的节点,其中节点是一个联合(如果节点是内部节点)或不(如果外部节点)包含左和右指针字段。

我的问题是

(A)作者在内部节点中的意思是什么?

(B)可以用C语言中的任何一个定义示例结构来理解语句吗?

谢谢!

作者在内部节点中的意思是什么?

我想这篇文章是关于一个叫做树的数据结构。 构建这种结构的方法之一是定义C结构(sic!),如下所示:

struct Node {
    int someData;
    struct Node *left, *right;
};

所以儿子指针笔者指的是这些leftright为指针类型的字段。 它们通常被称为指针。

任何人都可以在C中定义两种技术的示例结构来理解这些语句吗?

他们是这样的。

(1)

struct InternalNode;
struct ExternalNode;

union ChildPointer {
    struct InternalNode *asInternal;
    struct ExternalNode *asExternal;
};

struct InternalNode {
    // Some data here

    union ChildPointer left, right;
};

struct ExternalNode {
    // External node data here
};

但是,我不打算解释如何事先知道节点的左子节点是内部节点还是外部节点,可能是内部状态应该知道的,或者可能只有一个ExternalNode结构的实例,所有的非叶节点链接和直接比较是可能的,也许有人可以建议。

(2)

union Node;
struct InternalData {
    // Internal node data here

    union Node *left, *right;
};

struct ExternalData {
    // External node data here
};

union Node {
    struct InternalData internal;
    struct ExternalData external;
};

使用匿名结构/联合可以使这更方便,但这是C的ms扩展。

只有当您尝试在不包含数据的叶节点上保存一些内存或者如果它们确实需要一些内部节点不需要的额外内存时,这在理论上才有意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM