平衡二叉树的判断

问题描述

Given a binary tree, determine if it is height-balanced.

For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.


问题分析

如果二叉树为平衡树,则他的任何一个节点的两个子树的高度差不能超过1,树的问题首先想到要用递归来解决,所以可以递归遍历每个节点,判断他的左子树是否为平衡树,判断右子树是否为平衡树,在判断两个子树的高度差是否超过1,在判断整个树到底是不是平衡树;


算法(C++)/**

 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool isBalanced(TreeNode* root) {
        return height(root) != -1;
    }
    int height(TreeNode* root)
    {
        if(root == NULL)
            return 0;
        int h_left = height(root->left);//递归节点的左子树
        int h_right = height(root->right);//递归节点的右子树
        if(h_left == -1 || h_right == -1 || abs(h_left - h_right) > 1)//如果左子树不平衡,或右子树不平衡,或两个子树高度相差大于一,则返回树高度为-1,代表不平衡子树
            return -1;
        return max(h_right, h_left) + 1;//如果是平衡树,返回以该节点为顶点的子树的高度;
    }
};

总结

对于树的操作要思路清晰,我一开始的思路是写一个递归函数算高度,然后分别算出顶点的两个子树的高度,发现这并不能判断两个子树本身是不是平衡树,而且还很麻烦,所以这道题的关键不是算出一个高度的结果,而是判断子树本身是不是平衡树,以及两个子树的比较。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值