本文为个人的学习笔记,如果发现文中有那些不对的地方,希望大家多指点,在下先谢谢各位学友。
出自 《Cracking the coding interview》
首先想到的是简单的递归方法:
private int height(TreeNode node){ if(root == null) return 0; return 1 + Math.max(height(root.left),height(root.right)); } public boolean isBanlanced(TreeNode node){ if(node == null) return true; int l = height(node.left); int r = height(node.right); if(Math.abs(l-r) > 1) return false; return (isBanlanced(node.left) && isBanlanced(node.right)); }
我们知道递归方法简洁但是效率却不高,而且万一递归的深度过大,很可能会导致stackoverflow 。并且递归算法也不是cache friendly。
这里递归算法最大的性能瓶颈在于,在调用height 方法时(hot 点)出现许多子问题重叠计算,T(n)= O(n2)。
未完待续。。。。
结论:与二叉树有关的问题,可以会很快联想到递归的方法,有些问题可以通过遍历二叉树(前序,中序,后序)来解决。