剑指offer-38.二叉树的深度

来源:互联网 发布:淘宝比价助手 编辑:程序博客网 时间:2024/06/08 18:11

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


思路:求深度,第一次能想到的方法就是递归,但是除了递归还有层次遍历,本文提供递归和层次遍历两种解法。递归思想就是

求左右子树,然后深度各加一,再比较哪个大,然后返回哪个。层次遍历思想就是一层一层的遍历,把该层节点用队列收起,然后弹出,

最后对该层计数(该层要么0,要么1)。


递归版本:


/*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;        else        {            int left = TreeDepth(pRoot->left);            int right = TreeDepth(pRoot->right);            return (left > right ? left + 1: right + 1);        }           }};


层次遍历版本:

/*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) return 0;        queue<TreeNode*> que;        que.push(pRoot);        int depth=0;        while (!que.empty())         {            int size=que.size();            depth++;            for (int i=0;i<size;i++)             {      //一次处理一层的数据                TreeNode *node=que.front();                que.pop();                if (node->left)                     que.push(node->left);                if (node->right)                     que.push(node->right);            }        }        return depth;           }};



0 0