Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
问题:给定一个二叉树,判断其是否平衡。
当二叉树中所有节点的左右子树高度差不大于 1 时,这个二叉树视为平衡二叉树。
解题思路应该算一种分治思想。根据定义,递归地判断,实现判断。
1 const int unbalanceKids = -1; 2 3 /** 4 * count the number of children of node and itself 5 */ 6 int height(TreeNode* node){ 7 8 int heightL = 0; 9 if (node->left != NULL){ 10 heightL = height(node->left); 11 } 12 13 if(heightL == unbalanceKids){ 14 return unbalanceKids; 15 } 16 17 int heightR = 0; 18 if (node->right != NULL){ 19 heightR = height(node->right); 20 } 21 22 if(heightR == unbalanceKids){ 23 return unbalanceKids; 24 } 25 26 if (abs(heightL - heightR) > 1){ 27 return unbalanceKids; 28 } 29 30 return max(heightL, heightR) + 1; 31 } 32 33 bool isBalanced(TreeNode* root) { 34 35 if (root == NULL){ 36 return true; 37 } 38 39 int res = height(root); 40 if (res == unbalanceKids){ 41 return false; 42 } 43 44 return true; 45 }