108.将有序数组转换为平衡二叉搜索树
题目描述
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
解题方法
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
void InitNode(struct TreeNode *nowNode){
nowNode->left = NULL;
nowNode->right = NULL;
}
struct TreeNode * CreateBST( int* nums , int left , int right )
{
if(left > right)
{
return NULL;
}
struct TreeNode *NowNode = (struct TreeNode *)malloc(sizeof(struct TreeNode));
InitNode (NowNode);
if( right == left)
{
NowNode->val = nums[left];
}
else
{
int mid = (right + left )/2;
NowNode->val = nums[mid];
NowNode->left = CreateBST(nums,left,mid-1);
NowNode->right = CreateBST(nums,mid+1,right);
}
return NowNode;
}
struct TreeNode* sortedArrayToBST(int* nums, int numsSize){
return CreateBST(nums,0,numsSize - 1);
}
110.平衡二叉树
题目描述
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
解题方法
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
// 求节点最大深度 // 104
int TreeNodeHeight(struct TreeNode * root)
{
int l = 0, r = 0;
if (root == NULL)
return 0;
l = TreeNodeHeight(root->left);
r = TreeNodeHeight(root->right);
return l > r? ++l : ++r;
}
bool isBalanced(struct TreeNode* root)
{
if (root == NULL)
return true;
return abs(TreeNodeHeight(root->left) - TreeNodeHeight(root->right)) < 2
&& isBalanced(root->left)
&& isBalanced(root->right);
}