当前位置: 首页 > 后端技术 > Java

leetcode110.BalancedBinaryTreeBalancedBinaryTree(简单)

时间:2023-04-01 19:55:13 Java

1.题目给定一棵二叉树,判断它是否是高度平衡的二叉树。本题定义一棵高度平衡二叉树为:一棵二叉树每个节点的左右子树高度差的绝对值不超过1。例1:输入:root=[3,9,20,null,null,15,7]输出:true示例2:输入:root=[1,2,2,3,3,null,null,4,4]输出:false示例3:输入:root=[]输出:true提示:树的节点数在[0,5000]-104<=Node.val<=104范围内来源:LeetCode链接:https://leetcode.cn/problems/...版权归灵口网络所有。商业转载请联系官方授权,非商业转载请注明出处。2、解题思路:定义一个函数求每个节点的深度,然后比较每个节点的两棵子树的深度差,计算深度时通过访问一次来优化每个点。如果发现子树不平衡,则不计算具体深度,直接返回-1。优化方案:对于每个节点,通过checkDepth方法递归获取左右子树的深度。如果子树是平衡的,则返回真实深度。如果不平衡,直接返回-1。3.解题方法3.1Java实现/***定义一个二叉树节点。*公共类TreeNode{*intval;*左边的树节点;*正确的树节点;*TreeNode(){}*TreeNode(intval){this.val=val;}*TreeNode(intval,TreeNodeleft,TreeNoderight){*this.val=val;*this.left=左;*this.right=正确;*}*}*/classSolution{publicbooleanisBalanced(TreeNoderoot){returncheckDepth(root)!=-1;}intcheckDepth(TreeNoderoot){if(root==null){返回0;}intleft=checkDepth(root.left);如果(左==-1){返回-1;}intright=checkDepth(root.right);if(right==-1){return-1;}if(Math.abs(left-right)>1){return-1;}返回Math.max(左,右)+1;}}4.总结笔记2022/9/13中间层一定不能只是上传分发