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

解体思路:

  1. 如果根节点为空,则深度为0,返回0,递归的出口
  2. 如果根节点不为空,那么深度至少为1,然后我们求他们左右子树的深度,
  3. 比较左右子树深度值,返回较大的那一个
  4. 通过递归调用

代码实现

View Code

#include<iostream>
#include<stdlib.h>
using namespace std;struct BinaryTreeNode
{int m_nValue;BinaryTreeNode* m_pLeft;BinaryTreeNode* m_pRight;
};//创建二叉树结点
BinaryTreeNode* CreateBinaryTreeNode(int value)
{BinaryTreeNode* pNode=new BinaryTreeNode();pNode->m_nValue=value;pNode->m_pLeft=NULL;pNode->m_pRight=NULL;return pNode;
}//连接二叉树结点
void ConnectTreeNodes(BinaryTreeNode* pParent,BinaryTreeNode* pLeft,BinaryTreeNode* pRight)
{if(pParent!=NULL){pParent->m_pLeft=pLeft;pParent->m_pRight=pRight;}
}//求二叉树深度
int TreeDepth(BinaryTreeNode* pRoot)//计算二叉树深度
{if(pRoot==NULL)//如果pRoot为NULL,则深度为0,这也是递归的返回条件return 0;//如果pRoot不为NULL,那么深度至少为1,所以left和right=1int left=1;int right=1;left+=TreeDepth(pRoot->m_pLeft);//求出左子树的深度right+=TreeDepth(pRoot->m_pRight);//求出右子树深度return left>right?left:right;//返回深度较大的那一个
}void main()
{
//            1
//         /      \
//        2        3
//       /\         \
//      4  5         6
//           /
//        7//创建树结点BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1);BinaryTreeNode* pNode2 = CreateBinaryTreeNode(2);BinaryTreeNode* pNode3 = CreateBinaryTreeNode(3);BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4);BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5);BinaryTreeNode* pNode6 = CreateBinaryTreeNode(6);BinaryTreeNode* pNode7 = CreateBinaryTreeNode(7);//连接树结点
    ConnectTreeNodes(pNode1, pNode2, pNode3);ConnectTreeNodes(pNode2, pNode4, pNode5);ConnectTreeNodes(pNode3, NULL,   pNode6);ConnectTreeNodes(pNode5, pNode7,  NULL );int depth=TreeDepth(pNode1);cout<<depth<<endl;system("pause");
}

面试题:二叉树的深度相关推荐

  1. 剑指offer——面试题39:二叉树的深度

    剑指offer--面试题39:二叉树的深度 20180906整理 Solution1: 再本题中树的定义:若二叉树只有一个根节点,则此二叉树的深度为1. 迭代法,哈哈哈 /* struct TreeN ...

  2. 讲透学烂二叉树(六):二叉树的笔试题:翻转|宽度|深度

    翻转|镜像二叉树 华为面试题--将二叉树的两个孩子换位置,即左变右,右变左. 90% of our engineers use the software you wrote (Homebrew), b ...

  3. 面试题55 - I. 二叉树的深度

    2020-03-20 1.题目描述 求二叉树的深度 2.题解 用递归求解即可,注意终止条件,因为对这个题目比较熟悉,就直接在里面写的代码 3.代码 #include <iostream> ...

  4. 算法面试题-----二叉树完整刷题总结

    关于面试中你一定要会的二叉树算法题!! 这个阶段一直在进行刷题,现在总结一下二叉树的常见类型,觉得有用的朋友记得点个赞哈!让我知道自己的总结还是有帮助到一些人的,也为了让更多的人看到.整理不易,转载的 ...

  5. 第2关:计算二叉树的深度和节点个数

    #include <iostream> #include "binary_tree.h"BiTreeNode* CreatBiTree(char* s, int &am ...

  6. 剑指offer系列之三十七:二叉树的深度

    题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 有了前面寻找二叉树路径的基础之后,解决这题应该不难.根据书上的思路, ...

  7. 【剑指offer-Java版】39二叉树的深度

    二叉树的深度:递归 判断二叉树是否是平衡二叉树:注意二叉树平衡代表的是所有非叶子节点都是一棵平衡树 – 而不仅仅是根节点 public class _Q39<T> {public int ...

  8. 二叉树求深度的递归的详细分析

    >数据结构:typedef struct BINODE{TELEMETYPE data;struct BINODE *lchild,*rchild;}BiNode,*BiTtree;>递归 ...

  9. 数据结构实验之二叉树八:(中序后序)求二叉树的深度

    Description 已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度. Input 输入数据有多组,输入T,代表有T组数据.每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的 ...

  10. 二叉树的深度_[LeetCode 104] 二叉树的深度

    题目描述 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. ** 示例:** 给定二叉树 [3,9,20,null,n ...

最新文章

  1. 谁说程序员只能new对象?凭本事追的女神
  2. block用法(转)
  3. python paramiko模块 远程上传目录文件
  4. c语言不用switch做计算器,超级新手,用switch写了个计算器程序,求指导
  5. vue 使用sass 和less
  6. c++起始(名词修饰,extern “C” ,引用)
  7. OpenGL: 实现立体显示
  8. 【bzoj2806】 Ctsc2012—Cheat
  9. c++数字金字塔_“资金管理是投资最大的秘密”(超级干货),一生死记“金字塔加仓减仓法”,最安全稳健的操盘法方式!...
  10. 字符串型的数字相加减_【每日编程158期】罗马数字转整数
  11. 地理学中常见图的名称(或者分析)
  12. 一道JS面试题目引发的思考
  13. python输入字符串str_python字符串String模块
  14. P3317 [SDOI2014]重建
  15. 如何注册一个免费的iTunes帐号(Apple ID)
  16. ps里面的css,PS中如何添加图层样式
  17. python数字类型中包含了哪三种类型_Python数字类型中包含了________、________和_________三种类型。...
  18. 大话私服虚拟服务器,大话西游私服服务器
  19. 搭建 WordPress 博客教程
  20. 红帽linux云计算提供商,神州数码获得红帽云计算及服务供应商认证

热门文章

  1. ES6中的class是如何实现的?(附Babel编译的ES5代码详解)
  2. [转]深入理解CSS中的层叠上下文和层叠顺序
  3. Xilinx 推出 reVISION,继续拓展机器学习市场
  4. 原生JavaScript实现字符串长度截取
  5. 例说DNS递归/迭代名称解析原理
  6. Cisco ACL 一例
  7. knowledgetree汉化出现错误
  8. python whl是什么文件
  9. lua类库 middleclass学习笔记
  10. 思科发布安全大数据分析架构 OpenSOC