【代码随想录day 15】 力扣 110.平衡二叉树
视频讲解:https://www.bilibili.com/video/BV1Ug411S7my/?vd_source=a935eaede74a204ec74fd041b917810c
文档讲解:https://programmercarl.com/0110.%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91.html
力扣题目:https://leetcode.cn/problems/balanced-binary-tree/description/
判断一个二叉树是不是平衡二叉树主要就是看二叉树的左右子树的最大差值是否大于1
我们这里用C语言写判断函数,如果二叉树是平衡的,返回其深度之差,如果不平衡,返回-1.
在递归的过程中,如果子树已经不平衡了,那么整个二叉树就是不平衡的,因此我们一旦发现不平衡,直接返回-1即可。如果平衡的话,就返回最大深度,也就是1+fmax(left,right)。
int getDepth(struct TreeNode *node)
{if(!node){return 0;}int right=getDepth(node->right);if(right==-1) return -1;int left=getDepth(node->left);if(left==-1) return -1;if(abs(left-right)>=2) return -1;else{return 1+fmax(left,right);}
}
bool isBalanced(struct TreeNode* root) {//判断特殊情况if(!root){return 1;}//计算深度int result=getDepth(root); //判断是否相差大于1if(result==-1){return false;}else{return true;}//返回值
}
还有用C++写的代码,原理相同
class Solution {
public:int getDepth(TreeNode *node){//终止条件:节点为空if(node==NULL){return 0;}//开始递归int left=getDepth(node->left);//判断左子树是否平衡if(left==-1) return -1;//开始右递归int right=getDepth(node->right);//判断右子树是否平衡if(right==-1) return -1;//计算左右子树高度之差int result = abs(left-right);//高度只差如果大于1说明不平衡if(result>=2) return -1;//如果不大于一返回高度差else{return 1+max(left,right);}//返回值return result;}bool isBalanced(TreeNode* root) {//计算深度差int result=getDepth(root);//判断深度差是否等于-1if(result==-1){return false;}else{return true;}}
};