当前位置: 首页 > news >正文

二叉树高度-递归方式

        程序代码获取二叉树高度。

package com.ginko.datastructure;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;/*** 二叉树*/
public class BinaryTree {private BinaryTreeNode root;//根节点public BinaryTree(BinaryTreeNode root) {this.root = root;}/*** 二叉树层序遍历* 核心:引入队列,从root开始,左右孩子分别入队,然后从队列追个出队,队列为空时,遍历结束*/public List levelOrder() {List levelOrderResult = new ArrayList();//保持层序遍历的结果Queue queue = new LinkedList();queue.add(root);//加入根节点while (!queue.isEmpty()) {BinaryTreeNode currentNode = (BinaryTreeNode)queue.remove();//从队列获取levelOrderResult.add(currentNode.getData());BinaryTreeNode left = currentNode.getLeft();BinaryTreeNode right = currentNode.getRight();if(left != null) {queue.add(left);}if(right != null) {queue.add(right);}}return levelOrderResult;}/*** 获取二叉树高度* @param root* @return*/public int getTreeHeight(BinaryTreeNode root) {if(root == null) {return 0;}int leftHeight = getTreeHeight(root.getLeft());int rightHeight = getTreeHeight(root.getRight());return leftHeight > rightHeight? leftHeight +1:rightHeight + 1;}public static void main(String[] args) {/*** 构造树*                  1*              2        3*            4   5    6   7*         8    9*/BinaryTreeNode node8 = new BinaryTreeNode(8,null,null);BinaryTreeNode node9 = new BinaryTreeNode(9,null,null);BinaryTreeNode node4 = new BinaryTreeNode(4,node8,node9);BinaryTreeNode node5 = new BinaryTreeNode(5,null,null);BinaryTreeNode node2 = new BinaryTreeNode(2,node4,node5);BinaryTreeNode node6 = new BinaryTreeNode(6,null,null);BinaryTreeNode node7 = new BinaryTreeNode(7,null,null);BinaryTreeNode node3 = new BinaryTreeNode(3,node6,node7);BinaryTreeNode node1 = new BinaryTreeNode(1,node2,node3);BinaryTree binaryTree = new BinaryTree(node1);List result = binaryTree.levelOrder();result.forEach(s->{System.out.print(s + ",");});System.out.println();int height = binaryTree.getTreeHeight(node1);System.out.println("二叉树高度为:" + height);}
}

        运行结果如下,符合预期。

http://www.dtcms.com/a/355879.html

相关文章:

  • 大模型应用开发与大模型开发有什么区别?
  • c语言动态数组扩容
  • [数据结构] 复杂度和包装类和泛型
  • 虚函数指针和虚函数表的创建时机和存放位置
  • AI记忆革命:从七秒遗忘到终身学习
  • 线程池的执行原理
  • set_property CLOCK_DEDICATED_ROUTE BACKBONE/FALSE对时钟进行约束
  • 强化学习之GRPO
  • 硬件IIC使用问题汇总
  • 错误模块路径: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
  • IMIX数据全链路解析
  • 探索淀粉深加工的无限可能:2026 济南展览会前瞻
  • KeyHydra 2.008 安装教程 3ds Max 2020-2024 详细步骤图解(附安装包下载)
  • 【JavaScript】递归的问题以及优化方法
  • week5-[一维数组]去重
  • (笔记)Android窗口管理系统分析
  • 向量方法证明正余弦定理的数学理论体系
  • 如何保证数据的安全性和隐私性?
  • Spring Boot + KingbaseES 连接池实战
  • TypeScript:枚举类型
  • Milvus向量数据库是什么?
  • Active Directory Basics
  • UPAM(Unified Prompt Attack Model
  • 应急响应/windows权限维持/Linux权限维持
  • 虚拟机逃逸攻防演练:从攻击模拟到隔离漏洞防御实战
  • 机器学习回顾(二)——KNN算法
  • 【Cadence技巧】立创EDA/Altium/Allegro之间的封装转换
  • layout版图设计学习笔记2_工艺流程
  • 切入高潜市场,抢占行业先机!ES SHOW 2025展位预订火爆,10月28-30日共启增长新蓝海
  • php姓名三才五格api接口调用说明