题目描述
实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。
给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。
解法:1.递归求取节点的高度,注意递归终止条件,其余就是取左右子树最大的高度。 2.递归求取高度差,注意终止条件,为空的时候返回true,递归之前判断是否满足平衡条件,否则中途就该跳出递归,返回false。 左右子树节点继续递归。
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Balance { public: bool isBalance(TreeNode* root) { // write code here int diff; if(root == NULL) return true; //能够递归到叶节点,就说明中途无false的情况,所以结束条件为null diff = abs(height(root->left) - height(root->right)); if (diff > 1) return false; //先判断是否满足条件,然后再递归 else return (isBalance(root->left) && isBalance(root->right)); } int height(TreeNode* root) { if(root == NULL) return 0; else return max(height(root->left), height(root->right)) + 1; //递归求取高度,更节点为1 } };