check all leaves node at same level

/***
chekc if all leaves are at same level
similiar with get the height of the tree
***/
#include<iostream>

using namespace std;

struct node {
       int val;
       node *left, *right;

};

bool samelevel(node *root, int &level) {
       if (root == nullptr) { //empty node
              level = -1;
              return true;
       }

       if(root->left == nullptr && root->right == nullptr) { // leaf node
              level = 0;
              return true;
       }

       int left, right;
       if(samelevel(root->left, left) && samelevel(root->right, right)) {
              if (left == -1) level = right+1;
              else if (right == -1) level = left+1;
              else {
                     if (left != right) return false;
                     else level = left+1;
              }
       } else return false;

       return true;
}


void main() {
       node nodes[8];
       nodes[0].left = &nodes[1];
       nodes[0].right = &nodes[2];
       nodes[1].left = &nodes[3];
       nodes[1].right = nullptr;
       nodes[2].left = nullptr;
       nodes[2].right = &nodes[6];


       for(int i=0; i<8; i++) {
              nodes[i].val = i;
              if (i > 2)
              {
                     nodes[i].left = nullptr;
                     nodes[i].right = nullptr;
              }
       }
       nodes[3].left = &nodes[7];
       nodes[6].right = &nodes[5];

       node *root = nodes;
       int level;
       if (samelevel(root, level))
       {
              cout<<"same"<<endl;
       } else cout<<"not"<<endl;
}



Comments

Popular posts from this blog

Sudoku

Longest prefix matching - trie

Climbing Stairs