首页 > 其他分享 >平衡二叉树

平衡二叉树

时间:2023-08-17 22:23:29浏览次数:45  
标签:return leftresult rightresult 二叉树 平衡 root define

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;来终止掉空结点的递归

 

标签:return,leftresult,rightresult,二叉树,平衡,root,define
From: https://www.cnblogs.com/Sandals-little/p/17639016.html

相关文章

  • 剑指 Offer 07. 重建二叉树(中等)
    题目:classSolution{//本题思路:利用中序遍历,从前序遍历中找到左、右子树的根节点public:unordered_map<int,int>dic;//创建字典,映射当前根节点在中序遍历中的位置,以便于划分当前根节点的左右子树vector<int>preorder;//即下面的this->preorder......
  • [代码随想录]Day20-二叉树part09
    题目:669.修剪二叉搜索树思路:遍历到的值小于最小值,说明左子树里的所有节点都小于最小值,舍弃左子树。遍历到的值大于最大值,说明右子树里的所有节点都大于最大值,舍弃右子树。如果在范围内,就拼接左右子树然后返回节点代码:/***Definitionforabinarytreenode.*typeTr......
  • 代码随想录算法训练营第十八天| 513.找树左下角的值 112. 路径总和 106.从中序与
     找树左下角的值     卡哥建议:本地递归偏难,反而迭代简单属于模板题, 两种方法掌握一下   题目链接/文章讲解/视频讲解:https://programmercarl.com/0513.%E6%89%BE%E6%A0%91%E5%B7%A6%E4%B8%8B%E8%A7%92%E7%9A%84%E5%80%BC.html   做题思路:   题目说......
  • 代码随想录算法训练营第十七天| 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子
     卡哥建议:迭代法,大家可以直接过,二刷有精力的时候 再去掌握迭代法。  110.平衡二叉树 (优先掌握递归)   卡哥建议:再一次涉及到,什么是高度,什么是深度,可以巩固一下。   题目链接/文章讲解/视频讲解:https://programmercarl.com/0110.%E5%B9%B3%E8%A1%A1%E4%BA%8C%......
  • 【剑指Offer】58、对称的二叉树
    【剑指Offer】58、对称的二叉树题目描述:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。解题思路:本题判断一棵树是不是对称的,和第18题可以对比分析:二叉树的镜像,和LeetCode第101题:101.对称二叉树是同一道题。解......
  • 【剑指Offer】59、按之字形顺序打印二叉树
    【剑指Offer】59、按之字形顺序打印二叉树题目描述:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。解题思路:这道题仍然是二叉树的遍历,相当于层次遍历,可以和第22题:从上往下打印二......
  • 剑指 Offer 37. 序列化二叉树(困难)
    题目:classCodec{public:voidrserialize(TreeNode*root,string&str){//编码递归函数:将树按照前序遍历,放入str字符串中。每个节点元素用','分隔if(root==nullptr){//如果遇到空节点,写入"none"。str+="none,";}el......
  • [代码随想录]Day19-二叉树part08
    题目:235.二叉搜索树的最近公共祖先思路:BST和普通二叉树不同的一点是可以根据特性来找最近公共祖先,只要找到第一个值比p大比q小(假设p<q)的节点返回即可。代码:/***Definitionforabinarytreenode.*typeTreeNodestruct{*Valint*Left*TreeNode......
  • 【剑指Offer】38、二叉树的深度
    题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解题思路:本题相对比较简单。根据二叉树深度的定义,我们有以下理解:如果一棵树只有一个结点,那么它的深度为1。如果根结点只有左子树而没有右子树,那么......
  • [代码随想录]Day18-二叉树part07
    题目:530.二叉搜索树的最小绝对差思路:一个关键问题——BST的中序遍历是由小到大的顺序,也就是说记录遍历的前一个节点,每次比较当前节点-前一个节点的值即可(因为由小到大所以当前>前一个)代码:/***Definitionforabinarytreenode.*typeTreeNodestruct{*Val......