求二叉树中节点的最大距离递归解法

LoRA学习: SX1276/SX1277/SX1278对比 Lora芯片 SX1276/SX1277/SX1278的比较SX1276/7/8是一种半双工传输的低中频收发器,配备标了标准FSK和远距离扩频Lora调制解调器。该芯片可以用于超长距离的Lora扩频通信,并且抗干扰性强,同时达到低功耗要求。1、芯片关键参数对比: 可以看出SX1276的带宽范围为 7.8~500kHz ,扩频 因子6~12,并覆盖所有可用频段。 SX1277的带宽和频段方位与 S 阅读详情

问题定义

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

代码实现中二叉树用的是完全二叉树

import java.util.LinkedList;


public class Test_3_8 {

	public static int maxlen=0;
	public static void main(String[] args) {
		BTree btree = new BTree();
		int[] arr={1,2,3,4,5};
		for(int i =0;i<arr.length;i++){
			TreeNode newnode = new TreeNode();
			newnode.setValue(i);
			newnode.setMaxleft(0);
			newnode.setMaxright(0);
			btree.insertnode(newnode);
		}
		FindMaxLen(btree.getTree().getRoot());
		System.out.println(maxlen);

	}
	//寻找树中最长的两段距离
	public static void FindMaxLen(TreeNode root){
		//遍历到叶子节点,返回
		if(root==null)return;
		//如果左子树为空,那么该节点的左边最长距离为0
		if(root.getLeftchild()==null)
			root.setMaxleft(0);
		//如果右子树为空,那么该节点的右边最长距离为0
		if(root.getRightchild()==null)
			root.setMaxright(0);
		//如果左子树不为空,递归寻找左子树的最长距离
		if(root.getLeftchild()!=null)
			FindMaxLen(root.getLeftchild());
		//如果右子树不为空,递归寻找右子树的最长距离
		if(root.getRightchild()!=null)
			FindMaxLen(root.getRightchild());
		//计算左子树最长节点距离
		if(root.getLeftchild()!=null){
			int tempmax=0;
			if(root.getLeftchild().getMaxleft()>root.getLeftchild().getMaxright())
				tempmax=root.getLeftchild().getMaxleft();
			else
				tempmax=root.getLeftchild().getMaxright();
			root.setMaxleft(tempmax+1);
		}
		//计算右子树最长节点距离
		if(root.getRightchild()!=null){
			int tempmax=0;
			if(root.getRightchild().getMaxleft()>root.getRightchild().getMaxright())
				tempmax=root.getRightchild().getMaxleft();
			else
				tempmax=root.getRightchild().getMaxright();
			root.setMaxright(tempmax+1);
		}
		//更新最长距离
		if(root.getMaxleft()+root.getMaxright()>maxlen){
			maxlen=root.getMaxleft()+root.getMaxright();
		}
	}

}
class TreeNode{
	private TreeNode leftchild;//左子树
	private TreeNode rightchild;//右子树
	private int maxleft;//左子树中的最长距离
	private int maxright;//右子树中的最长距离
	private int value;//该节点的值
	public int getValue() {
		return value;
	}
	public void setValue(int value) {
		this.value = value;
	}
	public TreeNode getLeftchild() {
		return leftchild;
	}
	public void setLeftchild(TreeNode leftchild) {
		this.leftchild = leftchild;
	}
	public TreeNode getRightchild() {
		return rightchild;
	}
	public void setRightchild(TreeNode rightchild) {
		this.rightchild = rightchild;
	}
	public int getMaxleft() {
		return maxleft;
	}
	public void setMaxleft(int maxleft) {
		this.maxleft = maxleft;
	}
	public int getMaxright() {
		return maxright;
	}
	public void setMaxright(int maxright) {
		this.maxright = maxright;
	}
	
}
class Tree{
	private TreeNode root;

	public TreeNode getRoot() {
		return root;
	}

	public void setRoot(TreeNode root) {
		this.root = root;
	}
	
}
class Queue1{
	private LinkedList<TreeNode> list;
	public Queue1(){
		this.list=new LinkedList<TreeNode>();
	}
	public void push(TreeNode node){
		list.add(node);
	}
	public TreeNode pop(){
		return list.removeFirst();
	}
	public boolean isEmpty(){
		return list.isEmpty();
	}
}
class BTree{
	private Tree tree;
	public Tree getTree() {
		return tree;
	}
	public void setTree(Tree tree) {
		this.tree = tree;
	}
	private Queue1 queue;
	public BTree(){
		this.tree=new Tree();
	}
	public void insertnode(TreeNode node){
		if(tree.getRoot()==null){
			tree.setRoot(node);
			return;
		}
		else{
			Queue1 queue=new Queue1();
			queue.push(tree.getRoot());
			while(!queue.isEmpty()){
				TreeNode temp = queue.pop();
				if(temp.getLeftchild()==null){
					temp.setLeftchild(node);
					return;
					
				}
				else if(temp.getRightchild()==null){
					temp.setRightchild(node);
					return;
				}
				else{
					queue.push(temp.getLeftchild());
					queue.push(temp.getRightchild());
				}
			}
		}
	}
}


 

世界程序大赛获奖作品-C语言 这里面都是C编译出来的超级牛的程序,虽然没有文件很小,但是都出乎一般人的意料,64K!!!强!! 立即下载

相关推荐

MATLAB应用大全 全本书源文件

MATLAB应用大全 赵海滨 等编著 清华大学出版社 赵海滨编著的《MATLAB应用大全》由浅入深,全面、系统地介绍了MATLAB编程和开发的方方面面。书中的每章都提供了大量有针对性的实例,供读者实战演练。另外,为了帮助读者更高效、直观地学习,本书每章重点内容都专门录制了对应的教学视频。这些视频和本书所有的实例文件一起收录于配书DVD光盘中。《MATLAB应用大全》共23章,分为7篇。基础篇介绍了MATLAB基础、数组和矩阵分析、字符串分析;科学运算篇介绍了MATLAB数据分析、积分和微分运算、概率和数理统计、符号计算;数据可视化篇介绍了二维和三维数据的可视化;编程篇介绍了MATLAB基本编程、程序调试和编程技巧;仿真篇介绍了Simulink基本知识、Simulink建模和S-函数;高级应用篇介绍了GUI编程开发、GUIde工具建立GUI界面、文件夹管理和文件I/O操作、MATLAB编译器;工具箱与接口编程篇介绍了信号处理、小波分析、图像处理、神经网络4个工具箱,还介绍了MATLAB与Word和Excel的接口技术。无论是对于MATLAB的初学者,还是有一定基础的高级用户,本书都是一本难得的参考书。本书非常适合使用MATLAB进行编程和开发的本科生、研究生及教师,还适合广大科研和工程技术人员研读。

Java面试总结_二叉树结点最大距离

package com.binarytree.realize; //最大距离=左子树到根节点最大距离+右子树到根节点最大距离 //结点距离指两个结点之间边的个数 class NodeNew{ public int data; public NodeNew left=null; public NodeNew right=null; public int leftMaxDistance; ...

hxl0925的博客 672

mapinfo实例教程详解(彻底学会mapinfo)

mapinfo实例教程详解(教你如何彻底学会使用mapinfo)

算法:求二叉树节点的最大距离(最大直径)

对于以某个节点为根节点的子树,有如下两种情况:对于以root为头结点的二叉树,它的最大距离的可能性有两类:经过root,不经过root当前节点不参与路径,此时左右子树中最大路径较大的那个就是当前节点不参与路径时的最长路径。当前节点参与路径,此时最大的路径应该是:左树高+右树高+1(1为当前节点)这时候对于某个节点而言,只要向左右孩子节点收集信息,就能够计算它的最大路径,需要的信息有:从而总的来说,每次我们都需要从root的子树中得到两个信息:最长路径、高度,因此我们定义一个辅助类Info: 而为了在根节点汇

OceanStar的博客 446

STM32 颜色识别代码

该代码可以对特定颜色的物体进行定位,追踪。准确率高。

jsp简单的员工信息管理系统 附源码 程序实践

jsp简单的员工信息管理系统.zip 可用于程序实践

求二叉树中节点的最大距离

题意:给定一棵二叉树,假设父子节点定义两个节点之间的边数为“距离”,现在需要求一棵二叉树中最远两个节点的距离*/   5 /*显然两个节点肯定是叶子节点   6   根据是否经过根节点,分两种情况考虑   7   1.如果不经过根节点,那么最远的距离要么在左子树中,要么在右子树中   8   2.如果经过根节点,那么肯定一个节点在左子树中,另一个节点在右子树中   9     10  

wang11234514的专栏 619

免Root抓包神器Packet Capture:安卓App数据捕获全攻略

本文详细介绍了免Root安卓抓包神器Packet Capture的安装与使用全攻略。通过利用安卓系统的VPN Service API,该工具无需Root权限即可捕获并解密App的HTTP/HTTPS网络流量。文章从核心原理、证书安装、实战抓包步骤到结果分析与常见问题排查,提供了完整指南,是移动端开发、安全测试和数据分析的实用利器。

weixin_29232507的博客 1075

java 树最大距离_二叉树中节点的最大距离(java)

定义二叉树中节点的距离为节点之间边的个数。一个二叉树中节点的最大距离由三部分综合求得:一部分是左子树中节点的最大距离,另一部分是右子树中节点的最大距离,最后一部分是左边的最大深度加上右边的最大深度。 public static void makeTree(Node head){/* 14 25 3 6*///head.data=1;Node node4=new Node();...

weixin_39682673的博客 536

CATIA CAA开发环境搭建避坑指南:从授权服务到VS配置全流程

本文提供了一份详尽的CATIA CAA开发环境搭建避坑指南,涵盖从授权服务(DSLS)安装、Visual Studio版本匹配与集成配置,到编译调试全流程。重点解析了授权服务无法连接、模块加载失败等典型问题的解决方案,强调版本严格对应与纯英文环境是成功搭建的关键。

redis7keeper的博客 572

[WeChatMsg]导出csv格式微信聊天记录的手把手教程

手把手教大家如何导出自己的聊天记录得到csv文件,即使是电脑小白也可以轻松学会o(* ̄▽ ̄*)ブ

weixin_51094633的博客 1万+

使用双向链表构建二叉树_轻松搞定面试中的链表题目

树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树有关的题目基本都可以用递归思想解决,当然有些题目非递归解法也应该掌握,如非递归遍历节点等等。本文努力对二叉树相关题目做一个较全的整理总结,希望对找工作的同学有所帮助。二叉...

weixin_39670511的博客 358

【银河麒麟服务器】银河麒麟V10 SP3高级服务器操作系统网卡配置完全指南:图形界面、Network、NetworkManager、IP 地址、路由与端口聚合详解

本文系统介绍了银河麒麟V10SP4服务器操作系统的网络配置方法,涵盖图形界面、NetworkManager、nmcli命令行等多种配置方式。重点讲解了IP地址设置、路由管理以及端口聚合(Bonding)的实现,包括传统配置文件、nmcli和nmtui三种Bonding配置方案。文章对比了NetworkManager与传统network服务的区别,并提供了常见网络问题的排查建议。通过多种配置方法的详细说明,帮助用户掌握银河麒麟服务器系统的网络管理技能,构建稳定可靠的网络环境。

YHLCCY的博客 5372

【数据结构——树】二叉树面试相关知识点总结(二)

5. 将二叉查找树变为有序的双向链表 6. 求二叉树第K层的节点个数 11. 求二叉树中两个节点的最低公共祖先节点 12. 求二叉树中节点的最大距离 13. 由前序遍历序列和中序遍历序列重建二叉树

蝉之洞 682

别让IO口保护二极管坑了你!实测讲解单片机电流倒灌的三种典型症状与防护

本文深入解析单片机电流倒灌的三大典型症状与防护方案,重点分析STM32等单片机在ADC采样异常、系统假死和通信速率异常中的表现。通过实测数据和电路设计建议,提供从基础二极管隔离到专业隔离器件的分级防护策略,帮助工程师有效预防和解决电流倒灌问题。

weixin_29280219的博客 344

零基础实战:云开发家政维修小程序搭建指南

欢迎来到这本关于构建家政维修小程序的电子书!在当今数字化的浪潮中,线上服务已成为我们生活中不可或缺的一部分。从点餐购物到居家维修,人们越来越习惯通过指尖轻点来解决各种需求。正是基于这样的背景,我们希望通过这个系列,手把手地带领大家从零开始,搭建一个功能完备、体验流畅的家政维修平台。这不仅仅是一本技术教程,更是一次将想法变为现实的探索之旅。我们将深入浅出地讲解如何运用云开发等现代技术,实现从用户下单、支付,到客服派单、工人接单,再到订单完成和权限管理等一系列核心业务流程。

低代码布道师的博客 3431

轻松搞定面试中的二叉树题目

版权所有,转载请注明出处,谢谢! http://blog.youkuaiyun.com/walkinginthewind/article/details/7518888 树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树

h_wlyfw的专栏 740

2025年06月中国电子学会青少年软件编程(图形化)等级考试试卷(三级)答案 + 解析

2025年06月中国电子学会青少年软件编程(图形化)等级考试试卷(三级)答案 + 解析

伶俐角少儿编程 340

面试二叉树问题集锦

版权所有,转载请注明出处,谢谢! http://blog.youkuaiyun.com/walkinginthewind/article/details/7518888 树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树

tkp2014的专栏 443

Cesium 实现动态加载气象数据:渲染成动态雨雪/云层效果(源码 + 原理)

本文介绍了在Cesium中实现动态天气效果的技术方案。核心思路是通过时间轴驱动多层数据动态切换,包括:1)时间维度处理,按序列加载不同气象图层;2)空间维度处理,将气象数据切分为瓦片;3)效果层实现,制作风场、降水等动态可视化效果。文章详细讲解了后端数据预处理(生成瓦片和风场JSON)、前端实现(双层雷达瓦片交替渐变、风场粒子系统)的具体方法,并提供了完整的代码示例。此外还探讨了雨雪粒子、云层效果等增强功能,以及工程化建议,为构建科学准确的动态天气可视化系统提供了实用解决方案。

专注AI大模型,软件混淆,授权 621

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

二叉树相关题目

版权所有,转载请注明出处,谢谢! http://blog.youkuaiyun.com/walkinginthewind/article/details/7518888 树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树

u011412619的专栏 527

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

轻松搞定面试中的二叉树问题

版权所有,转载请注明出处,谢谢! http://blog.youkuaiyun.com/walkinginthewind/article/details/7518888 树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树

stay hungry,stay foolish 685

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: 生产者消费者模拟程序
下一篇: 根据二叉树的前序和中序构建二叉树
tanyujing
博客等级 码龄18年 135粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值