赞
踩
任意一个节点,其两棵子树的高度差不超过 1
;示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回 true 。 示例 2: 给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 / \ 4 4 返回 false 。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ // 计算节点的高度 int height(struct TreeNode* root) { if (root == NULL) { return 0; } int left_height = height(root->left); int right_height = height(root->right); return (left_height > right_height ? left_height : right_height) + 1; } // 检查二叉树是否平衡的辅助函数 bool isBalancedUtil(struct TreeNode* root) { if (root == NULL) { return true; } int left_height = height(root->left); int right_height = height(root->right); if (abs(left_height - right_height) <= 1 && isBalancedUtil(root->left) && isBalancedUtil(root->right)) { return true; } return false; } // 检查二叉树是否平衡的主函数 bool isBalanced(struct TreeNode* root) { return isBalancedUtil(root); }
height(struct TreeNode* root)
: 这个函数计算给定节点 root 的高度(或深度)。它通过递归地计算左子树和右子树的高度,然后返回较大的高度加上 1,表示当前节点的高度;isBalancedUtil(struct TreeNode* root)
: 这是一个辅助函数,用来检查以 root 为根的子树是否平衡。它通过递归地检查左子树和右子树的高度差是否小于等于 1,并且左子树和右子树是否也是平衡的,来判断当前子树是否平衡;isBalanced(struct TreeNode* root)
: 这是主函数,用来检查整棵二叉树是否平衡。它调用了 isBalancedUtil 函数来递归地检查每个子树是否平衡,并返回最终的判断结果;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。