bool IsBalancedTree(Tree* t,int* depth) { if(t==NULL) { *depth=0; return true; } int left,right; if(IsBalancedTree(t->left,&left) && IsBalancedTree(t->right,&right)) { int diff=left-right; if(diff<=1 || diff>=-1) { *depth=1+(left>right ? left: right); return true; } } return false; }
bool IsBalancedTree(BtNode root) { if(root == NULL) { return true; } if(abs(FindHeight(root->left) - FindHeight(root->right)) > 1) { return false; } else { if(IsBalancedTree(root->left) && IsBalancedTree(root->right)) { return true; } else { return false; } } }
int main(int argc, char* argv[]) { BtNode root = NodeCreate(1); BtNode node2 = NodeCreate(2); BtNode node3 = NodeCreate(3); BtNode node4 = NodeCreate(4); BtNode node5 = NodeCreate(5); BtNode node6 = NodeCreate(6); BtNode node7 = NodeCreate(7); BtNode node8 = NodeCreate(8); BtNode node9 = NodeCreate(9); root->left = node2; root->right = node3; node2->left = node4; node2->right = node5; node5->left = node7; node5->right = node8; node8->right = node9; node3->right = node6; if(IsBalancedTree(node5) == true) { printf("bal\n"); } else { printf("nonbal\n"); } return 0; }