N-ær trær i C

stemmer
14

Som ville være en ryddig implemenation av et N-ary tre i C-språk?

Particulary, jeg ønsker å implementere en n-ær treet, ikke selv ballancing, med en ubundet antall barn i hver node, der hver node har en allerede definert struct, som dette for eksempel:

struct task {
  char command[MAX_LENGTH];
  int required_time;
};
Publisert på 10/10/2008 klokken 01:52
kilden bruker
På andre språk...                            


2 svar

stemmer
51

Enhver n-ær treet kan bli representert som et binært tre, hvor i hver node venstre pekeren peker til den første barnet og riktige pekeren peker til den neste bror.

             RR
           / | \ |
          BCDB - C - D
         / \ | | |
        EFGE - FG

Så, ville saken være:

struct task {
  char command[MAX_LENGTH];
  int required_time;
};

struct node {
  struct task taskinfo;
  struct node *firstchild;
  struct node *nextsibling;
};

Denne teknikken har den fordelen at mange algoritmer er enklere å skrive som de kan uttrykkes på et binært tre i stedet for på en mer komplisert datastruktur.

Svarte 10/10/2008 kl. 16:15
kilden bruker

stemmer
13

Som et første pass, kan du ganske enkelt opprette en struct (la oss kalle det TreeNode ) som har en oppgave , samt et sett av pekere til TreeNode s. Dette settet kan enten være en matrise (hvis N er fast) eller en lenket liste (hvis N er variabel). Den lenket liste vil kreve at du erklære en ekstra struct (la oss kalte det ListNode ) med en TreeNode peker til selve barnet (del av treet), og en peker til neste ListNode i listen ( null om på slutten av liste).

Det kan se ut omtrent som dette:

struct task {
  char command[MAX_LENGTH];
  int required_time;
};

struct TreeNode;

struct ListNode {
  struct TreeNode * child;
  struct ListNode * next;
};

struct TreeNode {
  struct task myTask;
  struct ListNode myChildList;
};
Svarte 10/10/2008 kl. 02:21
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more