leetcode -- 108、110

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);
}
发布了184 篇原创文章 · 获赞 253 · 访问量 34万+

猜你喜欢

转载自blog.csdn.net/williamgavin/article/details/104308142