72. 平衡二叉树
class Solution { public: bool ans = true;; bool isBalanced(TreeNode* root) { if(!root) return true; maxDepth(root); return ans; } int maxDepth(TreeNode* root) { if(root == NULL) return 0; //root的左、右子树的最大深度 int leftDepth = maxDepth(root->left); int rightDepth = maxDepth(root->right); if(abs(leftDepth-rightDepth) > 1){ ans =false; } //else ans=true;添加这行代码就会报错 //返回的是左右子树的最大深度+1 return max(leftDepth, rightDepth) + 1; } };
上面的代码添加一行后报错,如下代码解释了为什么
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | class Solution { public : bool ans = true ; bool isBalanced(TreeNode* pRoot) { if (pRoot == NULL) return true ; //cout<<2<<endl; treeDepth(pRoot); //cout<<"ans ="<<ans<<endl; return ans; } int treeDepth(TreeNode* root) { int k; if (root == NULL) return 0; int leftDepth = treeDepth(root->left); // cout<<"leftDepth = "<<leftDepth<<endl; int rightDepth = treeDepth(root->right); // cout<<"rightDepth = "<<rightDepth<<endl; k = abs (leftDepth - rightDepth); cout<< "k = " <<k<<endl; if (k <= 1) { ans = true ; cout<< "k <= 1, ans = true;" <<endl; } else { ans = false ; cout<< "k > 1 ,ans = true;" <<endl; } return max(leftDepth,rightDepth)+1; } }; |
递归会多次判断k的值,每判断一次就是对ans重新赋值。题目要求满足只要有一次K>1,ans = false,就不是平衡二叉树。
如果添加了else ans=true;存在一种情况:在最后一次执行递归函数的时候,刚好满足k<=1,ans = true,但在之前的若干次递归中,有ans = False.
class Solution { public: #计算树的深度 int treeDepth(TreeNode* root){ if(!root) return 0; return max(treeDepth(root->left),treeDepth(root->right))+1; } bool isBalanced(TreeNode* root) { if(!root) return true; int left = treeDepth(root->left); int right = treeDepth(root->right); #判断左右子树是否满足条件,然后如果满足条件,判断子树的子树是否满足条件,也就是本级递归的返回值 if(abs(left-right)<=1) return isBalanced(root->left)&&isBalanced(root->right); #如果不满足条件直接返回false else return false; } }; 作者:蜗牛壳 链接:https://www.acwing.com/solution/acwing/content/1779/ 来源:AcWing 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
带女朋友搬家新家条件不好,累到女朋友了,让女朋友受苦了,特此明志:每天学习,明年这个时候(20190812)让女朋友住上大房子,永远年轻,永远热泪盈眶,很多人都是这样,他们都把自己当成身在梦中一样,浑浑噩噩地过日子,只有痛苦或爱或危险可以让他们重新感到这个世界的真实。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 用 C# 插值字符串处理器写一个 sscanf
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!