http://www.geeksforgeeks.org/how-to-determine-if-a-binary-tree-is-balanced/
1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 #include <queue> 5 #include <stack> 6 using namespace std; 7 8 struct node { 9 int data; 10 struct node *left, *right; 11 node() : data(0), left(NULL), right(NULL) { } 12 node(int d) : data(d), left(NULL), right(NULL) { } 13 }; 14 15 void print(node *node) { 16 if (!node) return; 17 print(node->left); 18 cout << node->data << " "; 19 print(node->right); 20 } 21 22 bool balanced(node *root, int &height) { 23 if (!root) return true; 24 int l = 0; 25 int r = 0; 26 if (!balanced(root->left, l) || !balanced(root->right, r)) return false; 27 if (l - r >= 2 || r - l >= 2) return false; 28 height = max(l, r) + 1; 29 return true; 30 } 31 32 33 int main() { 34 struct node* root = new node(1); 35 root->left = new node(2); 36 root->right = new node(3); 37 root->left->left = new node(4); 38 root->left->right = new node(5); 39 root->right->left = new node(6); 40 root->left->left->left = new node(7); 41 int height = 0; 42 if (balanced(root, height)) cout << "yes" << endl; 43 else cout << "NO" << endl; 44 return 0; 45 }