二叉树的最大深度与最小深度

求二叉树的最大深度与最小深度,递归算法。


最大深度

二叉树的最大深度是距根节点路径最长的某一树叶节点的深度。
二叉树的深度等于二叉树的高度,也就等于根节点的高度。根节点的高度为左右子树的高度较大者+1。
由此思想可用递归求解,其实也就是后序遍历二叉树的算法。

//     struct TreeNode {
//        Objects elements;
//        TreeNode* left;
//        TreeNode* right;
//        TreeNode ( Objects x ) : elements(x), left(nullptr),    right(nullptr) { }
//      }

int MaxDepth ( TreeNode* root ) {
    int depth = 0;
    if ( root ) {
        int ldepth = MaxDepth ( root -> left );
        int rdepth = MaxDepth ( root -> right );
        depth = ( ldepth > rdepth ) ? ldepth + 1 : rdepth + 1;
    }
    return depth;
}

最小深度

二叉树的最小深度,等于左右子树深度较小者+1。
这里需要注意的问题是:求最大深度的时候,只需要比较左右子树的深度,取较大者+1就行了;但是求最小深度的时候,需要区分双子树与单子树,双子树时,深度较小者+1,单子树时(即左右子树有一颗为空时)为深度较大者+1。
主要思想仍然是后序递归遍历。

int MinDepth(TreeNode* root) {
    if (root == nullptr) return 0;
    int l = MinDepth(root->left);
    int r = MinDepth(root->right);
    if (l==0 || r==0) { return l+r+1; }
    return (l<r?l:r)+1;
}
原文地址:https://www.cnblogs.com/yyehl/p/6652931.html