Лекция 07 - Двоично дърво

Wikipedia

Индиец в Youtube

Stanford

Код от час

В клас

#include <stdio.h>
#include <stdlib.h>

struct node_t {
  int data;
  struct node_t *left;
  struct node_t *right;
};

struct node_t *add(struct node_t *tree, int data) {
  if(tree == NULL) {
    struct node_t *new_node = malloc(sizeof(struct node_t));
    new_node->data = data;
    new_node->left = new_node->right = NULL;

    return new_node;
  }

  /*struct node_t *curr = tree;
  while(curr != NULL) {
    if(data < curr->data) curr = curr->left;
    else if(data > curr->data) curr = curr->right;

    //if(curr == NULL) break;
  }

  curr = new_node;*/
  if(data < tree->data) {
    tree->left = add(tree->left, data);
  } else if(data > tree->data) {
    tree->right = add(tree->right, data);
  }

  return tree;
}

void print_tree(struct node_t *tree) {
  if(tree == NULL) return;

  printf("%d\n", tree->data);

  print_tree(tree->left);
  print_tree(tree->right);

}

int main() {
  struct  node_t *tree = add(NULL, 13);
  tree = add(tree, 4);
  tree = add(tree, 2);
  tree = add(tree, 7);
  tree = add(tree, 17);
  tree = add(tree, 53);
  tree = add(tree, 41);
  tree = add(tree, 42);
  tree = add(tree, 69);

  print_tree(tree);
  return 0;
}