#include<stdio.h>
#include<conio.h>
struct node
{
  int data;
  struct node *right, *left;
}*root,*p,*q;

struct node *make(int y)
{
   struct node *newnode;
   newnode=(struct node *)malloc(sizeof(struct node));
   newnode->data=y;
   newnode->right=newnode->left=NULL;
   return(newnode);
}

void left(struct node *r,int x)
{
   if(r->left!=NULL)
   printf("\n Invalid !");
   else
   r->left=make(x);
}

void right(struct node *r,int x)
{
  if(r->right!=NULL)
  printf("\n Invalid !");
  else
  r->right=make(x);
}

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

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

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

void main()
{
   int no;
   int choice;
   clrscr();
   printf("\n Enter the root:");
   scanf("%d",& no);
   root=make(no);
   p=root;
   while(1)
   {
      printf("\n Enter another number:");
      scanf("%d",& no);
      if(no==-1)
      break;
      p=root;
      q=root;
      while(no!=p->data && q!=NULL)
      {
     p=q;
     if(no<p->data)
     q=p->left;
     else
     q=p->right;
      }
      if(no<p->data)
      {
     printf("\n Left branch of %d is %d",p->data,no);
     left(p,no);
      }
      else
      {
    right(p,no);
    printf("\n Right Branch of %d is %d",p->data,no);
      }
   }
     while(1)
     {
     printf("\n 1.Inorder Traversal \n 2.Preorder Traversal \n 3.Postorder Traversal \n 4.Exit");
     printf("\n Enter choice:");
     scanf("%d",&choice);
    switch(choice)
    {
      case 1 :inorder(root);
      break;
      case 2 :preorder(root);
      break;
      case 3 :postorder(root);
      break;
      case 4 :exit(0);
      default:printf("Error ! Invalid Choice ");
      break;
    }
    getch();
     }

}

Dani AI

Generated

A concise, practical addendum to 's example: the code is a clear learning demo of recursive inorder/preorder/postorder traversals, and the thread discussion (see , , and ) rightly points to fuller tutorials. The sample works for simple runs, but a few portability and correctness improvements make it safer and easier to extend in real projects.

Key issues to fix

  • Avoid non‑portable headers and DOS calls: conio.h, clrscr() and getch() are not portable. Use standard headers (<stdio.h>, <stdlib.h>) and int main(void) with return 0;.
  • Check allocations and return values: always test malloc for NULL before dereferencing. Casting malloc in C is unnecessary and can hide mistakes.
  • Make insertion explicit about duplicates (current code treats equal as right child). Either disallow duplicates, count them, or document the chosen policy.
  • Prefer local root and helper functions over global pointers, and add a free_tree routine to avoid leaks (use tools like Valgrind when testing).

Small, safe replacement for node creation + insertion (recursive)

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

struct node { int data; struct node *left, *right; };

struct node *make_node(int v) {
    struct node *n = malloc(sizeof *n);
    if (!n) { perror("malloc"); exit(EXIT_FAILURE); }
    n->data = v; n->left = n->right = NULL;
    return n;
}

struct node *insert(struct node *root, int v) {
    if (!root) return make_node(v);
    if (v < root->data) root->left  = insert(root->left, v);
    else if (v > root->data) root->right = insert(root->right, v);
    /* equal values ignored here; change policy if duplicates are desired */
    return root;
}

Notes: keep the original recursive traversals from if desired, but replace the setup/IO with portable code and add a free_tree routine. For production use, consider balanced trees (AVL/Red‑Black) or language/library containers to guarantee O(log n) behavior.

Recommended Answers

All 5 Replies

Any questions? or is this an example for an implementation of a Binary Tree Traversal?

Dude, This is just an example of traversal. The program can be extended to many other applications as well !

Dude, This is just an example of traversal. The program can be extended to many other applications as well !

There is a tutorial section...you can post your tutorial with detailed explanation there(if approved)...or better add to code snippet section(idon't think it requires approval)

> Dude, This is just an example of traversal.
There are plenty of better examples (much better) out there already. For example. :) Thanks, by the way. If not for your post I'm not sure how long it would have been before I noticed that my coloring was messed up for string and character literals.

There are plenty of better examples (much better) out there already. For example. :)

Cool tutorial! :cheesy: I read it all (believe it or not) and now I'm interested in this type of classification and currently writing my first binary search tree app.. And, thus, I'll probably be looking for help so may be contacting you :o Umm, but me being a n00b I have several stupid questions (though I'll keep them to myself for now because I haven't yet had a chance to play around with this and see if I can answer some of them independently)... So forgive me in advance ;) YAY tree!!

...

*thrashes keyboard in an attempt to write a program*

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.