二叉树有深度和高度两个属性,一个节点的深度指的是从根节点到该节点路径的长度,根节点的深度为1;一个节点的高度指的是从该节点到叶子节点所有路径上包含节点个数的最大值。叶子节点的高度为1,往上节点的高度依次递增。所以要求二叉树的深度,我们要求出从根节点到叶子结点最长路径的长度,从根节点到所有的叶子结点,实际就是在遍历这棵树,使用深度优先遍历可以解决这个问题。

  首先还是定义一颗二叉树的类。

 class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None

  然后,为了得到从根节点到叶子结点路径的长度,我们从根节点出发,进行深度优先遍历,当遍历到一个叶子结点时,就计算出了一条路径的长度,这时返回到上一层,即叶子结点的父亲节点,继续对另一颗子树进行深度优先遍历,计算其他路径的长度。因此,这里有两个问题,第一,我们需要一个变量保存当前遍历路径的长度,它保存的一定是当前遍历的路径长度,应该作为函数的参数(深度优先遍历的函数);第二,当遍历到叶子节点时,我们要判断这条路径的长度是否是最长的,因此还需要一个变量来保存当前最长的路径长度,它不会随着函数的迭代改变,应当是一个全局变量,代码如下。

class Solution:
#二叉树的深度
def TreeDepth(self, pRoot):
# write code here
global maxdepth#全局变量保存当前最长的路径长度
maxdepth=0
def DfsTree(root,depth=0):#depth是当前的路径长度
global maxdepth
if root:#节点非空,路径长度加1
depth+=1
if root.left:#左子树非空,继续遍历左子树
DfsTree(root.left,depth)
if root.right:#右子树非空,继续遍历右子树
DfsTree(root.right,depth)
if not root.left or root.right:#左右子树都是空的,即该节点是一个叶子结点,则判断depth是不是最长的路径
if depth>maxdepth:
maxdepth=depth
if root:
DfsTree(root)
return maxdepth

求二叉树的深度 python的更多相关文章

  1. 求二叉树的深度,从根节点到叶子节点的最大值,以及最大路径(python代码实现)

    首先定义一个节点类,包含三个成员变量,分别是节点值,左指针,右指针,如下代码所示: class Node(object): def __init__(self, value): self.value ...

  2. 二叉树各种相关操作(建立二叉树、前序、中序、后序、求二叉树的深度、查找二叉树节点,层次遍历二叉树等)(C语言版)

    将二叉树相关的操作集中在一个实例里,有助于理解有关二叉树的相关操作: 1.定义树的结构体: typedef struct TreeNode{ int data; struct TreeNode *le ...

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

    数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Probl ...

  4. php求二叉树的深度(1、二叉树就可以递归,因为结构和子结构太相似)(2、谋而后动,算法想清楚,很好过的)

    php求二叉树的深度(1.二叉树就可以递归,因为结构和子结构太相似)(2.谋而后动,算法想清楚,很好过的) 一.总结 1.二叉树就可以递归,因为结构和子结构太相似 2.谋而后动,算法想清楚,很好过的 ...

  5. SDUT-2804_数据结构实验之二叉树八:(中序后序)求二叉树的深度

    数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 已知一颗二叉树的中序 ...

  6. PTA 求二叉树的深度

    6-7 求二叉树的深度 (6 分)   本题要求实现一个函数,可返回二叉树的深度. 函数接口定义: int Depth(BiTree T); T是二叉树树根指针,函数Depth返回二叉树的深度,若树为 ...

  7. 【剑指offer】输入一颗二叉树的根节点,求二叉树的深度,C++实现

    原创博文,转载请注明出处! # 题目 # 举例        下图二叉树的深度为4,最长路径为1-2-5-7. # 思路(递归)       如果一个树只有一个节点,它的深度为1: 如果根节点只有左子 ...

  8. 求二叉树的深度和宽度[Java]

    这个是常见的对二叉树的操作.总结一下: 设节点的数据结构,如下: class TreeNode { char val; TreeNode left = null; TreeNode right = n ...

  9. LeetCode111_求二叉树最小深度(二叉树问题)

    题目: Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the s ...

随机推荐

  1. git-修改远程的URL

    git remote set-url命令修改remote URL git remote set-url传递两个参数 remote name.例如,origin或者upstream new remote ...

  2. 迟到的thuwc&noiwc2018总结

    已经4个多月没写博客了呢. thuwc和noiwc都炸了,接下来的一段时间都没怎么写题,靠文化课和游戏麻醉自己.这篇博客也算是向之前自闭.颓废的自己告别吧.. 先写一发游记: thuwc:Day1炸, ...

  3. Mybatis动态SQL——if,where,trim,choose,set.foreach的用法

    知识点:主要介绍mybatis中,动态sql中的if,where,trim,set,foreach的用法 自学谷粒学院mybatis学习视频,参考mybatis官方文档 java包:log4j.jar ...

  4. spark(三)从hbase取数据

    前言 通过spark获取hbase数据的过程中,遇到了InputFormat.文章主要围绕InputFormat介绍.会牵扯到spark,mapreduce,hbase相关内容 InputFormat ...

  5. Android -- 提交数据到服务器,Get Post方式, 异步Http框架提交

    1. 发送请求到服务器有几种方式 (1)HttpURLConnection (2)Httpclient 同步框架 (3)AsyncHttpClient 异步框架 (https://github.com ...

  6. angular之自定义管道

    1,装了angular2 的 cli之后,cmd中命令建立个管道文件 ng g p <name>; 如建一个在pipe文件中建一个add.pipe.ts文件 可以这么么写 ng g p p ...

  7. Java 类的构造器的调用顺序

    规则如下: 对于一个复杂的对象,构建器的调用遵照下面的顺序: (1) 调用父类构建器.这个步骤会不断重复下去,首先得到构建的是分级结构的根部,然后是下一个子类,等等.直到抵达最深一层的子类. (2) ...

  8. Visual Studio 2017 序列号 Key 激活码 VS2017 注册码

    Visual Studio 2017(VS2017) 企业版 Enterprise 注册码 序列号:NJVYC-BMHX2-G77MM-4XJMR-6Q8QF Visual Studio 2017(V ...

  9. 重新学习MySQL数据库5:根据MySQL索引原理进行分析与优化

    重新学习MySQL数据库5:根据MySQL索引原理进行分析与优化 一:Mysql原理与慢查询 MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能 ...

  10. [转载]宿主机为linux、windows分别实现VMware三种方式上网,Host-only win10+rhel7.2实现

    研究一下虚拟机三种上网方式 转自:http://linuxme.blog.51cto.com/1850814/389691 一.VMware三种方式工作原理1 Host-only连接方式 让虚机具有与 ...