确定思路
如果左右子树都是平衡二叉树,并且左右子树的高度相差不超过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;来终止掉空结点的递归