110. 平衡二叉树 - 力扣(LeetCode)

确定思路

如果左右子树都是平衡二叉树,并且左右子树的高度相差不超过1,那么就是平衡二叉树,如果左子树不是平衡二叉树也就不用对右子树进行递归了

确定终止条件

应该是遍历到叶子节点,因为叶子节点不能构成二叉树了,因为就没有再往下遍历的必要了

———————————————————————————————————————写不出来

经验1:当你发现递归要实现两个功能的时候,并且一个功能返回值是非布尔型,另外一个返回的是布尔型,那么一定要想办法实现非布尔型的逻辑,然后在非布尔型的逻辑中顺便实现布尔型的逻辑,以整数来实现真和假

 1 class Solution {
 2 public:
 3     int define(TreeNode*root){
 4         if(root==nullptr) return 0;
 5         int leftresult=define(root->left);
 6         if(leftresult==-1) return -1;
 7         int rightresult=define(root->right);
 8         if(rightresult==-1) return -1;
 9         return abs(leftresult-rightresult)>1?-1:1+max(leftresult,rightresult);//用来计算左右子树的高度的
10     }
11     bool isBalanced(TreeNode* root) {
12         if(define(root)==-1) return false;
13         else return true;
14     }
15 };

 

经验2:如果根节点想利用字节点的返回值时,就不要写if(root->left)和if(root->right),这就意味着我将会对空结点递归,这时我必须写if(root==nullptr) return 0;来终止掉空结点的递归

 

posted on 2023-08-17 22:11  小凉拖  阅读(26)  评论(0编辑  收藏  举报