从根节点到叶子点的最长路径上的结点数为深度
方法:根据树的特性,比较左右子树,选那个长的加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);
}
方法二:用后序遍历的方式遍历每一个节点,在遍历每一个节点的时候记录它的深度,一边遍历一边判断,需要给函数一个表示深度的变量
来源:https://www.cnblogs.com/niliuxiaocheng/p/12593345.html