fork download
  1. #include<iostream>
  2. #include<cstdlib>
  3. using namespace std;
  4. typedef struct node
  5. {
  6. struct node* left;
  7. long value;
  8. struct node* right;
  9. }tnode;
  10. tnode* insertnode(long,tnode*);
  11. tnode* createnode(long);
  12. int height(tnode*);
  13. void preorder(tnode*);
  14. int main()
  15. {
  16. int n,i;
  17. cin>>n;
  18. long input[n];
  19. for(i=0;i<n;i++)
  20. {
  21. cin>>input[i];
  22. }
  23. tnode *root=(tnode*)malloc(sizeof(tnode));
  24. root=NULL;
  25. //cout<<"HI"<<endl;
  26. root=insertnode(input[0],root);
  27. for(i=1;i<n;i++)
  28. {
  29. insertnode(input[i],root);
  30. }
  31. preorder(root);
  32. cout<<endl;
  33. cout<<height(root)<<endl;
  34. return 0;
  35. }
  36. tnode* insertnode(long value,tnode* node)
  37. {
  38. if(node==NULL)
  39. {
  40. return createnode(value);
  41. }
  42. else if(value<node->value)
  43. {
  44. node->left=insertnode(value,node->left);
  45. }
  46. else if(value>node->value)
  47. {
  48. node->right=insertnode(value,node->right);
  49. }
  50. }
  51. tnode* createnode(long value)
  52. {
  53. tnode* temp=(tnode*)malloc(sizeof(tnode));
  54. temp->value=value;
  55. temp->left=temp->right=NULL;
  56. return temp;
  57. }
  58. int height(tnode* node)
  59. {
  60. cout<<"Height called for node "<<node->value<<endl;
  61. int lht,rht;
  62. if(node==NULL)
  63. {
  64. return 0;
  65. }
  66. else
  67. {
  68. lht=height(node->left);
  69. rht=height(node->right);
  70. if(lht>=rht)
  71. {
  72. return lht+1;
  73. }
  74. else
  75. {
  76. return rht+1;
  77. }
  78. }
  79. }
  80. void preorder(tnode* temp)
  81. {
  82. if(temp!=NULL)
  83. {
  84. cout<<temp->value<<" ";
  85. preorder(temp->left);
  86. preorder(temp->right);
  87. }
  88. }
Runtime error #stdin #stdout 0s 15240KB
stdin
9
2 1 3 4 5 6 7 8 9
stdout
2 1 9 
Height called for node 2
Height called for node 1