算法题之求二叉树的最大距离

二叉树是一种非常经典的数据结构。如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。

下面我们随意构造出一棵二叉树,计算它的最大距离,如上图,节点之间单位距离为1,最大距离(红色线条)为5。

 

考虑使用中序遍历+递归的方法计算,用Java实现的代码如下:

package com.algo;public class LearnTree {//树的结构如下:/* 14     25  3  67*/int maxLength = 0;public static void main(String[] args) {LearnTree learnTree = new LearnTree();learnTree.calMaxLength();System.out.println("二叉树最大距离:" + learnTree.maxLength);}public void calMaxLength() {Node head=new Node();head.data=1;        // 根节点赋初值makeTree(head);     // 构造一棵二叉树calREC(head);       // 中序遍历 + 递归计算}public int calREC(Node head) {if(head == null) return 0;head.leftLen = head.left != null ? calREC(head.left) + 1 : 0;head.rightLen = head.right != null ? calREC(head.right) + 1 : 0;if(head.rightLen + head.leftLen > maxLength) maxLength = head.rightLen + head.leftLen;return  head.rightLen>head.leftLen?head.rightLen:head.leftLen;}public void makeTree (Node head) {/* 14     25  3  67*/Node node4=new Node();node4.data=4;node4.parent=head;head.left=node4;Node node5=new Node();node5.data=5;node5.parent=node4;node4.right=node5;Node node2=new Node();node2.data=2;head.right=node2;node2.parent=head;Node node3=new Node();node3.data=3;node3.parent=node2;node2.left=node3;Node node6=new Node();node6.data=6;node6.parent=node2;node2.right=node6;Node node7=new Node();node7.data=7;node7.parent=node6;node6.right=node7;}
}/*定义二叉树的父节点,左右子节点,数据节点*/
class Node {Node parent=null;Node left=null;Node right=null;Object data=null;int leftLen;int rightLen;
}

  

转载于:https://www.cnblogs.com/shixiangwan/p/6771237.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL基本操作指令

MySQL 注: MySQL对大小写不敏感, 需要对大小检索, 使用关键字binary, "[]"中内容为可选内容; table_name, tableName表示表名, columnName表示列名, DataType表示表中列数据类型, 粗体部分表示关键字 创建数据库: create database [if not exits] 数据库名;删除数据…

php 公众号验证回调方法_微信公众号关键词自动回复设置方法!

什么是公众号关键词自动回复?在微信公众号平台设置关键词自动回复,可以通过添加规则,关注/订阅的用户发送的消息内容如果是你设置的关键字,即可以实现自动回复预先设置好的内容。关键字自动回复设置方法:1、 首先我们进…

图文|Android 使用Thread 和多线程使用互斥锁

为什么需要多线程进行开发?多线程不管是嵌入式系统RTOS,Linux,还是应用开发,中间件开发,都是必不可少的,做一个技术的时候,如果能做到举一反三,下次使用的时候不会再遇到坑&#xff…

01.轮播图之三 : collectionView 轮播

个人觉得 collection view 做轮播是最方便的,设置下flowlayout 其他不会有很大的变动,没有什么逻辑的代码 lets begin…… 创建自定义的view .h 声明文件 interface CollectionViewShuffling : UIViewproperty (nonatomic,strong)NSArray *array;end .m …

JDBC入门级操作

JDBC:数据库连接, 通过接口实现不同数据库之间的切换, 面向接口编程 JDBC驱动程序将JDBC调用映射成特定的数据库调用 驱动类型: 1.JDBC驱动:JDBC-ODBC桥,最早的实现方式,将JDBC API映射到ODBC API,Java8中已删除 2.直接将JDBC API映射成数据库特定的客户端API,次驱动包含特定数…

手机调试python的软件_Appium+Python(ios真机移动端App H5混合自动化实战测试)

一、环境搭建篇(一)安装JDK大家自行安装(二)安装Appium1、appium desktop2、appium server> brew install node # get node.js> npm install -g appium # get appium> npm install wd # get appium client> appium & # start appium> node your-appium-test…

计算机专业的学生该选择日后的人生道路?继续从事IT还是考公务员……

问题来自知乎原问题如下:知乎上的盆友们大家好!我是某高校大二学生。万能的知友们,有相关经验的大家给点宝贵意见呗,万分感谢。个人问题:我当时是听说这一行工资高,因为家里条件一般,所以想要挣…

file_put_contents()写入数组

file_put_contents()写入数组 $arr array(name>张三,‘age’>26, sex>男 ) $str var_export($arr,TRUE); file_put_contents($filename,$str);转载于:https://www.cnblogs.com/icefei/p/6773916.html

JVM垃圾收集器与内存分配策略学习总结

方法区: 1.线程共享 2.储存类信息,常量,静态变量,编译器编译后的代码 3.非堆(别名)用于区分Java堆 4.不需要连续的内存 5.可以固定或可扩张 6.选择不实现垃圾回收//这个区域很少进行垃圾回收 7.针对常量池回收 8.对类型的卸载 9.无法满足内存分配需求抛出OutOfMemoryError4 虚…

汇编比较两个数大小_计算机是怎样跑起来的 -- 体验一次汇编过程

标志内存或I/O中存储单元的数字叫做“地址”。CPU中的标志寄存器有什么作用?用于在运算指令执行后,存储运算结果的某些状态。从程序员的角度看硬件CPU:种类,时钟信号的频率。可以使用哪种机器语言取决于CPU的种类。内存信息&#…

Nginx 作为 WebSockets 代理

WebSocket 协议给我们提供了一个创建可以支持客户端和服务端进行双向实时通信的web应用程序的方法。相比之前使用的方法,WebSocket(作为HTML5的一部分)可以使我们更容易开的发出这种类型的应用程序。绝大多数的现代浏览器都支持WebSocket&…

设计模式小结

开始的毛病:变量命名不规范,if-else判断有的代码做无用功,代码健壮性太差,没有做try-cath异常处理 工厂模式(创建型模式): 创建对象接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建延伸到子类进行 主要解决接口选择问题,明确计划不同条件下执行创建不同实例 通过子…

android区块链 钱包_区块链钱包Cashbox 开发工程师聊一聊开源

今天与大家聊一聊软件开源。事情的起因是一次闲谈的时候,市场部的同事表示:不做软件开发的人不能够理解为什么要把软件源代码公开出去。当时的我很惊讶,因为就像他们不理解为什么要开源一样,我也不理解他们为什么不理解为什么要开…

dom4j创建、解析xml文件(增删改查)

先对xml文件进行解析,xml文件如下图所示 <?xml version"1.0" encoding"UTF-8"?><?eclipse version"3.4"?> <student1> <studentID>001</studentID> <name>sanny</name> <major>…

Java的Class类文件结构及基本字节码指令

Class类文件的结构 概念:Class文件是一组以8位字节为基础单位的二进制流 按顺序整齐排列 没有任何分隔符,内容全部是运行时的必要数据,没有空隙存在 排序方式:高位在前 Big-Endian:最高字节在地址最低位,最低字节在地址最高位 Little-Endian:相反 储存方式:类似于C语言结构体…

Android 7.1 32位apk导致的系统库找不到问题

出现问题 因为我们安卓7.1系统的应用都是64位的APK&#xff0c;我们自己开发的应用是32位的APK&#xff0c;这样在启动的时候&#xff0c;就大概率的出现库找不到的问题。 错误的日志如下&#xff1a; Line 440: 03-12 10:48:39.620 634 634 W PackageManager: Instruct…

python基础知识下载_Python基础知识(一)

一、安装pythonwindow系统下先下载的 python 安装包&#xff0c;直接安装即可。为确认是否安装正确&#xff0c;可用系统记事本创建一个hello.py的程序其中包含如下内容&#xff1a;1 #!/usr/bin/env python32 print("Hello", "World!")代码说明&#xff1…

单词的理解 —— 词义的变化(翻译)

mimic&#xff1a;模仿&#xff0c;摹拟&#xff08;而不是最小化&#xff09;minder&#xff1a;n. 看守者&#xff1b;照顾者 保镖等近似含义&#xff1b;outstanding&#xff0c;outstanding work&#xff1a; 未完成的工作&#xff0c;backlog&#xff1a;n. [管理] 积压的…

JVM类加载机制_字节码执行引擎_Java内存模型

类加载机制: 类加载生命期:加载(Loading),验证(Verification),准备(Preparation),解析(Resolution),初始化(Initialization),使用(Using),卸载(Unloading)初始化:1.遇到new,getstatic,putstatic,invokestatic指令,类没有进行初始化,先触发初始化2.java反射机制3.初始化一个类,…

最新车载导航端口检测工具_高德地图这个功能 把微信都没做好的车载社交解决了?...

在汽车网联化和智能化带给人们的诸多想象里&#xff0c;车内社交似乎是最虚无缥缈的那个。在移动互联网领域&#xff0c;微信通过满足人们社交需求这个基本点&#xff0c;构建起庞大的用户群体&#xff0c;展示出巨大的市场前景。但在驾车场景下&#xff0c;车载社交该怎么玩&a…