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.
We can check by the definition: left subtree is balanced, right subtree is balanced and the depth of two subtrees never defer by more than 1.
C++ Code:
/* * func: get_height * goal: get the height of the binary tree * @param root: root node of the tree * return: the height of the tree */ int get_height(TreeNode *root){ if(root == nullptr){ return 0; }else{ int left_height = get_height(root->left); int right_height = get_height(root->right); return left_height > right_height ? left_height + 1 : right_height + 1; } } /* * func: is_balanced * goal: to check if the tree is height balanced * @param root: root node of the tree * return: true or false */ bool is_balanced(TreeNode *root){ if(root == nullptr){ return true; }else{ int left_height = get_height(root->left); int right_height = get_height(root->right); return is_balanced(root->left) && is_balanced(root->right) && (abs(left_height-right_height) <= 1); } }
Python Code:
# func: to get the height of the current node # if tree start from current node is not balanced, return -2 # height starts from -1 # @param: root node of the tree # @return: height def get_height(node): if not node: return -1 left_height = get_height(node.left) if left_height == -2: return -2 right_height = get_height(node.right) if right_height == -2: return -2 if abs(left_height-right_height) > 1: return -2 return max(left_height, right_height) + 1 # func: to check if the tree is height balanced # @param root: root node of the tree # @return: True or False def is_balanced(root): return get_height(root) != -2
No comments:
Post a Comment