剑指offer(C++)-JZ55:二叉树的深度(数据结构-树)

Posted 翟天保Steven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer(C++)-JZ55:二叉树的深度(数据结构-树)相关的知识,希望对你有一定的参考价值。

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

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

数据范围:节点的数量满足 0≤n≤100 ,节点上的值满足0≤val≤100

进阶:空间复杂度 O(1) ,时间复杂度 O(n)

假如输入的用例为1,2,3,4,5,#,6,#,#,7,那么如下图:

 

示例:

输入:

1,2,3,4,5,#,6,#,#,7

返回值:

4

解题思路:

本题考察数据结构树的使用。有两个解法。

  1. 递归。分治思想,分别统计左右两个子树的深度,取最大值加一即可;从根结点开始,一级级往下统计,再返回上去就得到结果了。
  2. 队列。队列的特点是先进先出,我们想将根结点扔进去,用size读取当前队列的长度,然后进行size次的弹出,同时每次弹出后再往队列中塞入被弹出结点的左右树;如果队列中持续有结点,说明没到底部;若队列为空,说明当前的level就是最深的深度了,再往下没有结点了。

测试代码:

解法一:递归

/*
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;
        int leftnum=TreeDepth(pRoot->left);
        int rightnum=TreeDepth(pRoot->right);
        return max(leftnum,rightnum)+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*> q;
        q.push(pRoot);
        int level=0;
        // 队列先进先出
        while(!q.empty())
        
            int size=q.size();
            // 将当前级的结点遍历一遍
            while(size--)
            
                // 定位到头部,再弹出
                auto f=q.front();
                q.pop();
                // 如果左右子树都为空,那么q就空了,也就终止循环了
                if(f->left)
                    q.push(f->left);
                if(f->right)
                    q.push(f->right);
            
            level++;
        
        return level;
    
;

以上是关于剑指offer(C++)-JZ55:二叉树的深度(数据结构-树)的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer(C++)-JZ55:二叉树的深度(数据结构-树)

剑指offer(C++)-JZ27:二叉树的镜像(数据结构-树)

剑指offer(C++)-JZ27:二叉树的镜像(数据结构-树)

剑指offer(C++)-JZ8:二叉树的下一个结点(数据结构-树)

剑指offer(C++)-JZ8:二叉树的下一个结点(数据结构-树)

剑指 Offer 55 - I. 二叉树的深度