标签:
转自:http://blog.csdn.net/brillianteagle/article/details/39118937
一、完全二叉树的判断
参考:http://blog.csdn.net/lilypp/article/details/6158699/
【分析】根节点开始进行层次遍历,节点入队列,如果队列不为空,循环。遇到第一个没有左儿子或者右儿子的节点,设置标志位,如果之后再遇到有左/右儿子的节点,那么这不是一颗完全二叉树。
二、平衡二叉树的判断
【分析-1】从root开始往下递归判断节点的左右子树的深度差(动态规划问题,但不容易加入备忘机制,所以比较低效) 。子树的深度被重复计算,所以比较低效。
/*递归判断左右子树的深度,如果深度差的绝对值大于1表明非平衡树*/
【分析-2】利用动态规划的方法从底向上计算每个子数的深度。从顶向下递归传递一个Depth 对象,探底之后就从底向上开始计算,本质上是后续遍历。这里要注意,Depth depth需要传址调用,所以不能用int或Interger,而要新定义一个类。
三、二叉搜索树(BST)的判断
参考:http://www.2cto.com/kf/201310/250996.html
【分析】BST的中序遍历是递增数列,所以可以利用中序遍历来进行判断。这里也是递归调用,需要传址调用,所以不能用int或Interger来定义pre。
先设计一个类:
函数体:
标签:
原文地址:http://www.cnblogs.com/sunshisonghit/p/4548298.html