面试题:二叉树的深度
题目:输入一棵二叉树的根节点,求该树的深度。从根节点到叶子结点一次经过的结点形成树的一条路径,最长路径的长度为树的深度。根节点的深度为1。
解体思路:
- 如果根节点为空,则深度为0,返回0,递归的出口
- 如果根节点不为空,那么深度至少为1,然后我们求他们左右子树的深度,
- 比较左右子树深度值,返回较大的那一个
- 通过递归调用
代码实现
#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"); }
面试题:二叉树的深度相关推荐
- 剑指offer——面试题39:二叉树的深度
剑指offer--面试题39:二叉树的深度 20180906整理 Solution1: 再本题中树的定义:若二叉树只有一个根节点,则此二叉树的深度为1. 迭代法,哈哈哈 /* struct TreeN ...
- 讲透学烂二叉树(六):二叉树的笔试题:翻转|宽度|深度
翻转|镜像二叉树 华为面试题--将二叉树的两个孩子换位置,即左变右,右变左. 90% of our engineers use the software you wrote (Homebrew), b ...
- 面试题55 - I. 二叉树的深度
2020-03-20 1.题目描述 求二叉树的深度 2.题解 用递归求解即可,注意终止条件,因为对这个题目比较熟悉,就直接在里面写的代码 3.代码 #include <iostream> ...
- 算法面试题-----二叉树完整刷题总结
关于面试中你一定要会的二叉树算法题!! 这个阶段一直在进行刷题,现在总结一下二叉树的常见类型,觉得有用的朋友记得点个赞哈!让我知道自己的总结还是有帮助到一些人的,也为了让更多的人看到.整理不易,转载的 ...
- 第2关:计算二叉树的深度和节点个数
#include <iostream> #include "binary_tree.h"BiTreeNode* CreatBiTree(char* s, int &am ...
- 剑指offer系列之三十七:二叉树的深度
题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 有了前面寻找二叉树路径的基础之后,解决这题应该不难.根据书上的思路, ...
- 【剑指offer-Java版】39二叉树的深度
二叉树的深度:递归 判断二叉树是否是平衡二叉树:注意二叉树平衡代表的是所有非叶子节点都是一棵平衡树 – 而不仅仅是根节点 public class _Q39<T> {public int ...
- 二叉树求深度的递归的详细分析
>数据结构:typedef struct BINODE{TELEMETYPE data;struct BINODE *lchild,*rchild;}BiNode,*BiTtree;>递归 ...
- 数据结构实验之二叉树八:(中序后序)求二叉树的深度
Description 已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度. Input 输入数据有多组,输入T,代表有T组数据.每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的 ...
- 二叉树的深度_[LeetCode 104] 二叉树的深度
题目描述 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. ** 示例:** 给定二叉树 [3,9,20,null,n ...
最新文章
- 谁说程序员只能new对象?凭本事追的女神
- block用法(转)
- python paramiko模块 远程上传目录文件
- c语言不用switch做计算器,超级新手,用switch写了个计算器程序,求指导
- vue 使用sass 和less
- c++起始(名词修饰,extern “C” ,引用)
- OpenGL: 实现立体显示
- 【bzoj2806】 Ctsc2012—Cheat
- c++数字金字塔_“资金管理是投资最大的秘密”(超级干货),一生死记“金字塔加仓减仓法”,最安全稳健的操盘法方式!...
- 字符串型的数字相加减_【每日编程158期】罗马数字转整数
- 地理学中常见图的名称(或者分析)
- 一道JS面试题目引发的思考
- python输入字符串str_python字符串String模块
- P3317 [SDOI2014]重建
- 如何注册一个免费的iTunes帐号(Apple ID)
- ps里面的css,PS中如何添加图层样式
- python数字类型中包含了哪三种类型_Python数字类型中包含了________、________和_________三种类型。...
- 大话私服虚拟服务器,大话西游私服服务器
- 搭建 WordPress 博客教程
- 红帽linux云计算提供商,神州数码获得红帽云计算及服务供应商认证