算法刷题记录.leetcode110平衡二叉树

101 阅读1分钟

题目描述

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

解析

  • 编写递归函数确定根节点高度,在给定函数中进行判断。
  • 所编写的递归函数:递归计算每个节点的高度,若不合规(平衡二叉树),则返回-1;

递归

  1. 确定函数参数和返回值
    int getHeight(TreeNode* root)
  2. 确定终止条件
    if(root == nullptr) return 0;
  3. 确定单层递归逻辑:
  • 采用后序遍历,递归左右子树高度,通过左右子树高度计算父节点高度;
  • 递归左子树高度,若左子树高度不合规,则返回-1;
  • 递归右子树高度,若右子树高度不合规,则返回-1;
  • 计算该节点高度,若该节点左右子树高度差大于1,则不合规返回-1;若合规,则返回1+较高子树高度,即该节点高度。
int left = getHeight(root->left);

if(left==-1) return -1;

int right = getHeight(root->right);

if(right==-1) return -1;

\


int height;

if(abs(left-right)>1) height = -1;

else height = 1+max(left,right);

return height;

代码

class Solution {

public:

bool isBalanced(TreeNode* root) {

return getHeight(root) == -1 ? false : true ;

}

\


int getHeight(TreeNode* root){

if(root == nullptr) return 0;

\


int left = getHeight(root->left);

if(left==-1) return -1;

int right = getHeight(root->right);

if(right==-1) return -1;

\


int height;

if(abs(left-right)>1) height = -1;

else height = 1+max(left,right);

return height;

\
\


}

\
\


};