面试题39:二叉树的深度

来源:互联网 发布:成都生活家装饰 知乎 编辑:程序博客网 时间:2024/04/30 11:46

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

    这题可以用递归做,较为简单,代码如下:

    

struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};class Solution {public:    int TreeDepth(TreeNode* pRoot)    {        if(pRoot==NULL)            return 0;        int leftNodeDepth=TreeDepth(pRoot->left);        int rightNodeDepth=TreeDepth(pRoot->right);        return max(leftNodeDepth,rightNodeDepth)+1;    }};

       随后,该题目又出了一个扩展题目,让判断是否是一棵平衡二叉树。平衡二叉树就是任意结点的左右子树深度相差不超过1,代码如下:

class Solution {public:    bool IsBalanced_Solution(TreeNode* pRoot) {        if(pRoot==NULL)            return true;               int leftLength=TreeDepth(pRoot->left);        int rightLength=TreeDepth(pRoot->right);        if(leftLength-rightLength>1||rightLength-leftLength>1)            return false;        else            return IsBalanced_Solution(pRoot->left)&&IsBalanced_Solution(pRoot->right);    }      int TreeDepth(TreeNode* pRoot)    {        if(pRoot==NULL)            return 0;        int leftNodeDepth=TreeDepth(pRoot->left);        int rightNodeDepth=TreeDepth(pRoot->right);        return max(leftNodeDepth,rightNodeDepth)+1;    }    };


0 0
原创粉丝点击