码迷,mamicode.com
首页 > 其他好文 > 详细

55 二叉树的深度

时间:2019-03-25 20:43:37      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:public   col   des   描述   功能测试   treenode   非递归   二叉树的深度   依次   

题目描述

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

测试序列

功能测试(输入普通的二叉树;二叉树的左右节点都没有左/右子树)

特殊输入测试(只有一个节点;空树)

解题思路

1)递归方法,取左右子树最大的深度+1。根节点也占一个深度(所以要加1)

//实现1
class Solution { public: int TreeDepth(TreeNode* pRoot) { if(pRoot==nullptr) return 0; if(pRoot->left==nullptr && pRoot->right==nullptr) //叶节点 return 1; return max(TreeDepth(pRoot->left),TreeDepth(pRoot->right))+1; } };
//实现2
class Solution {
public:
    int TreeDepth(TreeNode* pRoot)
    {
        if(pRoot==nullptr)
            return 0;
        int nleft = TreeDepth( pRoot->left);
        int nright = TreeDepth( pRoot->right);
        return (nleft>nright)?(nleft+1):(nright+1);
    }
};

  

2)非递归写法:层次遍历

class Solution {
public:
    int TreeDepth(TreeNode* pRoot)
    {
        if(pRoot==nullptr)
            return 0;
        
        queue<TreeNode*> levelNodes;
        levelNodes.push(pRoot);
        int count=0;
        while(!levelNodes.empty()){
            int size=levelNodes.size();
            while(size--){
                TreeNode* temp = levelNodes.front();
                levelNodes.pop();
                if(temp->left!=nullptr)
                    levelNodes.push(temp->left);
                if(temp->right!=nullptr)
                    levelNodes.push(temp->right);
            }
            count++;
        }
        return count;
    }
};

  

 

 

 

 

  

55 二叉树的深度

标签:public   col   des   描述   功能测试   treenode   非递归   二叉树的深度   依次   

原文地址:https://www.cnblogs.com/GuoXinxin/p/10595221.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!