LeetCode 110. 平衡二叉树 | C++语言版
LeetCode 110. 平衡二叉树
题目描述
题目地址:110. 平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
解题思路
思路一:使用递归
代码实现
C++
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
// 返回以该节点为根节点的二叉树的高度,如果不是平衡二叉树了则返回-1
int getHeight(TreeNode* node){
if(node==NULL) return 0;
int leftHeight=getHeight(node->left);
//如果不是二叉平衡树,则返回-1
if(leftHeight==-1) return -1;
int rightHeight=getHeight(node->right);
//如果不是二叉平衡树,则返回-1
if(rightHeight==-1) return -1;
//返回以该节点为根节点的二叉树的高度
return abs(leftHeight-rightHeight) >1 ? -1 : 1+max(leftHeight,rightHeight);
}
bool isBalanced(TreeNode* root) {
//平衡二叉树:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1
//二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数
//由于高度只能从下到上去查,所以只能后序遍历(左右中)
return getHeight(root) ==-1 ? false:true;
}
};
运行结果
参考文章:
思路二:减少遍历节点数
代码实现
C++
在这里插入代码片