簡體   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