【二叉树】----二叉树的深度

1.题目

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

2.代码
  • 分治法
class Solution {
public:
    int TreeDepth(TreeNode* pRoot)
    {
        if (pRoot == NULL)
            return 0;
        int left =1+ TreeDepth(pRoot->left);
        int right =1+ TreeDepth(pRoot->right);
        return left>right? left: right;
    }
};
  • 层序
class Solution {
public:
    int TreeDepth(TreeNode* pRoot)
    {
        if(pRoot == NULL)
            return 0;
        queue<TreeNode*> q;
        q.push(pRoot);
        int level =0;
        while (!q.empty())
        {
            int sz = q.size();
            while (sz--)
            {
                auto node = q.front();
                q.pop();
                if (node->left)
                    q.push(node->left);
                if (node->right)
                    q.push(node->right);
            }
            ++level;
        }
        return level;
    }
};
3.思路

1.分治分别求左右子树的深度,然后取大的
2.层序是遍历每层,同时统计出每层的结点数,然后本层出队完,层数加1.

你可能感兴趣的:(算法集锦)