*LeetCode-Balanced Binary Tree
来源:互联网 发布:js push unshift 编辑:程序博客网 时间:2024/05/22 02:46
感觉一写递归就全是错。
首先练熟递归,然后搞清楚dfs bfs与各种traversal关系,再写树
这个题首先一开始递归写的有问题,既然每次已进入helper函数,首先判断了node是否为空,就不要再继续先判断是否有左右子再递归了,直接递归就行。正确的:
public int countD ( TreeNode node){ if ( node == null) return 0; return Math.max(countD(node.left),countD(node.right))+1; }
错误的:
public int countD ( TreeNode node){ if ( node == null) return 0; if ( node.left == null && node.right == null ) return 1; int leftVal = 0; int riVal = 0; if ( node.left != null){ leftVal = countD(node.left); } if ( node.right != null){ riVal = countD(node.right); } return Math.max(leftVal,riVal)+1; }
然后就是主函数调用也是一样,直接把root放入就行,不用判断左右是否null
最大的问题是假如只考虑左右子树的depth 而不考虑左右子树是否平衡,就会有问题,就是左右子树的depth虽然相等,但他们本身是不平衡的 所以最后的判断要继续递归isbalanced这个函数。
public class Solution { public boolean isBalanced(TreeNode root) { if ( root == null ) return true; if ( root.left == null && root.right == null ){ //这个判断没有必要 return true; } boolean res = false; int leftVal = countD(root.left); int riVal = countD(root.right); if ( Math.abs(leftVal-riVal) <= 1 && isBalanced(root.left) && isBalanced(root.right)){ res = true; } return res; } public int countD ( TreeNode node){ if ( node == null) return 0; return Math.max(countD(node.left),countD(node.right))+1; }}
补充一点:一开始想的是,在判断某个子树的时候,假如它不平衡,那么整个树就不平衡了,直接就可以return false。本打算是用node.val记录高度,然后helper也是个返回bool的函数。
试了一下 发现自己傻了 不可能,因为即使返回了false 也只是返回上一层,还是要遍历的
0 0
- LeetCode: Balanced Binary Tree
- [LeetCode]Balanced Binary Tree
- LeetCode Balanced Binary Tree
- [Leetcode] Balanced Binary Tree
- LeetCode : Balanced Binary Tree
- LeetCode Balanced Binary Tree
- [LeetCode] Balanced Binary Tree
- 【leetcode】Balanced Binary Tree
- [LeetCode]Balanced Binary Tree
- [LeetCode] Balanced Binary Tree
- [Leetcode]Balanced Binary Tree
- [leetcode]Balanced Binary Tree
- Leetcode: Balanced Binary Tree
- LeetCode-Balanced Binary Tree
- LeetCode - Balanced Binary Tree
- [LeetCode] Balanced Binary Tree
- LeetCode | Balanced Binary Tree
- 【leetcode】Balanced Binary Tree
- MS-SQL2005服务启动发生错误1053处理
- GitHub常用命令
- Git安装
- HP打印机出现TRAY 2 EMPTY
- github生成SSH公钥
- *LeetCode-Balanced Binary Tree
- 排除SCO UNIX系统故障实例
- H3C SecPath 防火墙设置之端口映射(命令)
- 蓝的成长记——追逐DBA(14): 难忘的“云”端,起步的hadoop部署
- LIUNX ARM 启动流程分析
- c#网络编程常用特性之方法回调
- Codeforces Round #257 div.2 D or 450D Jzzhu and Cities【最短路】
- com.microsoft.sqlserver.jdbc.SQLServerException: 对象名 'xxxxx' 无效
- 函数指针解析(C语言)