面试题五十五:二叉树的深度

 

从根节点到叶子点的最长路径上的结点数为深度
方法:根据树的特性,比较左右子树,选那个长的加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);
        }

方法二:用后序遍历的方式遍历每一个节点,在遍历每一个节点的时候记录它的深度,一边遍历一边判断,需要给函数一个表示深度的变量

posted @ 2020-03-29 16:53  浪波激泥  阅读(152)  评论(0编辑  收藏  举报