面试题五十五:二叉树的深度
从根节点到叶子点的最长路径上的结点数为深度
方法:根据树的特性,比较左右子树,选那个长的加1;大问题小化递归计算
int TreeDepth(BinaryTreeNode pNode){ //边界,叶子的下一个返回0 if(pNode==null ) return 0; int L= TreeDepth( pNode.L )+1; int R=TreeDepth( pNode.R)+1; return (L>R)?L:R; }
题目二:判断是否是平衡二叉树 左右子树深度差不超过一
方法一:判断左右子树的深度后做差,进行判断.重复计算过多。性能不佳
bool Isbalanced (BinaryTreeNode pNode){ if(pNode==null) return true; int L= TreeDepth( pNode.L ); int R=TreeDepth( pNode.R); if(L-R>1||L-R<-1) return false; return Isbalanced(pNode.L) && Isbalanced(pNode.R); }
方法二:用后序遍历的方式遍历每一个节点,在遍历每一个节点的时候记录它的深度,一边遍历一边判断,需要给函数一个表示深度的变量
浪波激泥