General sententia de arbore, exsecutione et magis

Multi probabiliter conati sunt invenire constructionem arboris generalem, sed quaesitio machinae tantum inventa binaria... Arbor binaria, arbor binaria traversal et multa alia algorithms.
Imo vero communis arbor nullibi adhibetur, tarde traversal, exigui casus usus.

Ego igitur hanc quaestionem interrogavi et nunc quomodo arbor aedificata sit exponam. Ita, idealis structura, arbor generalis tres variabiles debet recondere;

  • monstratorem primogenitum
  • monstratorem fratrem
  • in notitia tu properas ad reponunt

struct Tnode {
    int key;
    struct Tnode *son;
    struct Tnode *brother;
};
typedef struct Tnode Node;

Eamus regulam ad verticem;

Node *tree = NULL;

Conveniunt ante vertices ingrediendi, haec arbor binaria non est, et quilibet vertex tot liberos habere potest quot desideratos.

  • + 2 (vel +ssbb 2) - insertio in arborem (pro generali ligno, via datur per lineam, ubi r est radix creatio, s transitus ad filium maximum, b transitus ad. frater);

Exemplum demus vobis.

+r 1
+ 2
+ 3
+ 3
+s 5
+sb 6
+sb 7

Lignum sic erit:

1
  2
    5
  3
    6
    7
  3

Primum, faciamus functionem quae verticem addit, nempe memoriam ad verticem allatet et monstratorem huic vertex transeat (alicuius initio non connexum).

Node *create_tree(int v) {
  Node *Tree = (Node *) malloc(sizeof(Node));
  Tree->key = v;
  //обнуляСм ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΊ Π±Ρ€Π°Ρ‚ΡŒΡΠΌ ΠΈ ΡΡ‹Π½ΠΎΠ²ΡŒΡΠΌ, нСзависимая Π²Π΅Ρ€ΡˆΠΈΠ½Π°, которая Ρ…Ρ€Π°Π½ΠΈΡ‚ value
  Tree->son = NULL;
  Tree->brother = NULL;
  return Tree;
}

Etiam functionem creare debes quae tramitem chordae tractat (+bs...). Quoties ab radice committitur traversalis, si non creatur, nullas nos output (nihil possumus). Si vertex non est, creare oportet. Imus ad partum arboris munus et regulam ad radicem accipimus.

Nota quod Node arbor structuram praeterit, non describendo. Hoc nobis facultatem dat mutandi res quae cum declaratione Node *arboris facere non possumus.

In genere quaerendum est monstratorem ad verticem cui adiiciendum est filium;

Node* add_node(Node **tree, const char *a) {
  Node* t = *tree;
  int value;
  scanf("%d", &value);
  int i = 0;
      while (a[++i] != ' ') {
        if (a[i] == 'r') {
            *tree = create_tree(value); // создаСм ΠΊΠΎΡ€Π΅Π½ΡŒ
            t = *tree;
            return *tree;
          }
        if (a[i] == 's') {
          if (t = to_son(t)) // функция, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° сына
            continue;
          return NULL; //ΠΈΠ½Π°Ρ‡Π΅ NULL
        }
        if (a[i] == 'b') {
          if (t = to_brother(t)) //Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±Ρ€Π°Ρ‚Π° t 
            continue;
          return NULL;
        }
    }
    if (t->son != NULL) {
    t = last_son(t); // ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ ΠΊ Π²Π΅Ρ€ΡˆΠΈΠ½Π΅, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ…ΠΎΡ‚Π΅Π»ΠΈ 
   //ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠ΄Π΅ΠΌ ΠΊ послСднСму Π΅Π΅ сыну,
   //Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Π΅Ρ† списка
    t->brother = create_tree(value);
    return t->brother;
    }
    else {//Ссли сына Π½Π΅Ρ‚, Ρ‚ΠΎ создадим Π΅Π³ΠΎ
      t->son = create_tree(value);
      return t->son;
    }
}

Sic arborem edificamus.

P.S. primus articulus meus, ut placet non nimis aspere iudicare

Source: www.habr.com