剑指offer 面试题39:二叉树的深度

题目:
输入一颗二叉树的根节点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

struct BinaryTreeNode {
    int                                m_nValue;
    BinaryTreeNode*          m_pLeft;
    BinaryTreeNode*          m_pRight;
};

解法:

int treeDepth(BinaryTreeNode* pRoot) {
    if (pRoot == 0)    return 0;
    int left    =  treeDepth(pRoot->m_pLeft);
    int right  =  treeDepth(pRoot->m_pRight);
    return 1+ (left > right ? left : right); 
}

拓展
判断一颗二叉树是否是一颗平衡二叉树。平衡二叉树,对任何一个结点,左右子树的深度差距不超过1.
解法一:
从根节点开始,对每一个结点判断左右子树是否平衡。判断的方法:求左右子树的深度,如果深度相差不超过1,即可判断为平衡二叉树

    bool isBalanced(BinaryTreeNode* pRoot) {
        if (pRoot == 0)    return true;
        int left = treeDepth(pRoot->m_pLeft);
        int right = treeDepth(pRoot->m_pRight);
        int diff = left - right;
        if (!(diff <= 1 && diff >= -1)) {
            return false;
        }
        return isBalanced(pRoot->m_pLeft) && isBalanced(pRoot->m_pRight);
    }

该方法,会重复遍历结点

解法二:

    bool isBalanced(BinaryTreeNode* pRoot, int *depth) {
        if (pRoot == 0) {
            *depth = 0;
            return true;
        }
        int left = 0;
        int right = 0;
        bool leftBalanced = isBalanced(pRoot->m_pLeft, &left);
        bool rightBalanced = isBalanced(pRoot->m_pRight, &right);
        int diff = left - right;
        if (leftBalanced && rightBalanced && (diff <= 1 && diff >= -1)) {
            *depth = 1 + (left > right ? left : right);
            return true;
        }
        return false;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 13,370评论 0 25
  • 数据结构与算法--从平衡二叉树(AVL)到红黑树 上节学习了二叉查找树。算法的性能取决于树的形状,而树的形状取决于...
    sunhaiyu阅读 7,688评论 4 32
  • 数据结构和算法--二叉树的实现 几种二叉树 1、二叉树 和普通的树相比,二叉树有如下特点: 每个结点最多只有两棵子...
    sunhaiyu阅读 6,534评论 0 14
  • 四、树与二叉树 1. 二叉树的顺序存储结构 二叉树的顺序存储就是用数组存储二叉树。二叉树的每个结点在顺序存储中都有...
    MinoyJet阅读 1,597评论 0 7
  • 0. 什么是树 数据的基本单位是数据元素,在涉及到数据处理时数据元素之间的关系称之为结构,我们依据数据元素之间关系...
    安安zoe阅读 499评论 0 0