ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

力扣110题(平衡二叉树、递归)

2021-08-01 11:59:53  阅读:121  来源: 互联网

标签:right return int 110 力扣 二叉树 root left


110.给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

  1. 递归解法如下:递归地求解左右子树是否为平衡二叉树,求左右子树是否为平衡二叉树的方法是对求高度的递归函数进行一些改造,当求出来的左右子树的高度差大于1的时候就返回-1,表明此时已经不满足平衡二叉树的定义了。
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

int getHeight (struct TreeNode* root) {
/* 原先求高度的递归函数
	if (root == NULL)
		return 0;
	int left = getHeight(root->left);
	int right = getHeight(root->right);
	return left > right ? left + 1 : right + 1;
*/

    if (root == NULL)
        return 0;
    int left = getHeight(root->left);
    if (left == -1)
        return -1;
    int right = getHeight(root->right);
    if (right == -1)
        return -1;
    return abs(left - right) > 1 ? -1 : (left > right ? left + 1 : right + 1) ;
}



bool isBalanced(struct TreeNode* root){
    return getHeight(root) == -1 ? false : true;
}

该题的递归解法确实一开始没有想到要怎么写,有想到是要递归地求解高度,但写着写着就绕晕了。看题解的总结是这样:只要是涉及到要求二叉树的高度,那就必须要用到后序遍历,也就是先求左右子树的高度再去求根节点。

  1. 题解还有一种解法是迭代法,但觉得逻辑不太清晰,这里就不放了,有需要之后再会看吧。

标签:right,return,int,110,力扣,二叉树,root,left
来源: https://blog.csdn.net/weixin_44247784/article/details/119295789

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有