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

[亡魂溺海] 提交于 2020-03-29 17:47:00
 

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

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!