【问题标题】:Representation of internal and external nodes in binary tree in CC中二叉树内部和外部节点的表示
【发布时间】:2011-07-25 21:23:33
【问题描述】:

我正在阅读 Tannenbaum 用 C 和 C++ 编写的数据结构。以下是书中的文字sn-p

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

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

我的问题是

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

(B) 任何人都可以为 C 中的两种技术定义示例结构来理解语句吗?

谢谢!

【问题讨论】:

  • "当然,内部节点内的子指针必须标识为指向内部和外部节点。"我在 C 语言中的二叉树实现中没有一个明确地完成过……我总是将外部节点的左右子字段设置为 NULL。不过,我知道有些人在他们的外部设备上使用哨兵节点。
  • 基于这个sn-p,我对这本书印象不深。

标签: c data-structures


【解决方案1】:

作者是什么意思内部节点中的子指针?

我想本文是关于一种称为树的数据结构。构建这种结构的方法之一是定义 C 结构(原文如此!),如下所示:

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

所以作者所指的子指针是这些具有指针类型的leftright 字段。它们通常被称为 child 指针。

任何人都可以为 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 扩展。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多