Back Source

DIfferent Traversal methods and checking if BST.

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

typedef struct Tree {
  int data;
  struct Tree *left;
  struct Tree *right;
} Tree;

Tree *create_node(int data) {
  Tree *tr = (Tree *)malloc(sizeof(Tree));
  tr->data = data;
  tr->right = NULL;
  tr->left = NULL;
  return tr;
}

void preorder(Tree *node) {
  if (node != NULL) {
    printf("%d, ", node->data);
    preorder(node->left);
    preorder(node->right);
  }
}

void postorder(Tree *node) {
  if (node != NULL) {
    postorder(node->left);
    postorder(node->right);
    printf("%d, ", node->data);
  }
}

void inorder(Tree *node) {
  if (node != NULL) {
    inorder(node->left);
    printf("%d, ", node->data);
    inorder(node->right);
  }
}

int isBst(Tree *node, Tree **prev) {
  if (node != NULL) {
    if (!isBst(node->left, prev))
      return 0;
    if (*prev != NULL && node->data <= (*prev)->data)
      return 0;
    *prev = node;
    return isBst(node->right, prev);
  } else
    return 1;
}

int main() {
  Tree *root = create_node(9);
  Tree *n1 = create_node(3);
  Tree *n2 = create_node(19);
  root->left = n1;
  root->right = n2;

  // n1
  Tree *n3 = create_node(1);
  Tree *n4 = create_node(6);
  n1->left = n3;
  n1->right = n4;

  // n2
  Tree *n5 = create_node(20);
  n2->right = n5;

  printf("Inorder Traversal: \n");
  inorder(root);
  printf("\n");
  Tree *prev = NULL;
  printf("isBST: %d\n", isBst(root, &prev));

  return 0;
}