茂名网站制作策划网络推广渠道和方式

张小明 2026/1/10 12:22:56
茂名网站制作策划,网络推广渠道和方式,怎么样做购物网站,加微信群网站怎么做的深入浅出Java二叉树#xff1a;原理、实现与实战 一、二叉树核心概念深度解析 1. 二叉树的定义与分类 二叉树是一种每个节点最多有2个子节点的树状结构#xff0c;子节点分为左子节点#xff08;lChild#xff09;和右子节点#xff08;rChild#xff09;。根据节点分布规…深入浅出Java二叉树原理、实现与实战一、二叉树核心概念深度解析1. 二叉树的定义与分类二叉树是一种每个节点最多有2个子节点的树状结构子节点分为左子节点lChild和右子节点rChild。根据节点分布规则常见类型包括普通二叉树无约束规则节点任意分布二叉搜索树BST左子树所有节点值 根节点值右子树所有节点值 根节点值本文实现此类型具备高效查询特性完全二叉树除最后一层外每层节点数均达最大值且最后一层节点靠左排列适合用数组存储满二叉树每一层的节点数都达到该层的最大值如深度为k的满二叉树有2k−12^k-12k−1个节点平衡二叉树如AVL树、红黑树通过旋转机制维持树的高度平衡保证查询/插入效率稳定在O(logn)。2. 二叉树的核心操作与应用场景操作类型核心逻辑典型应用场景节点创建/插入按树的规则如BST插入节点构建索引、实现有序数据存储遍历按特定顺序访问所有节点数据导出、表达式解析节点查询按值定位目标节点字典查询、数据库索引查询节点删除移除节点并维持树的结构规则动态数据维护3. 二叉树的存储方式链式存储通过TreeNode类的lChild/rChild指针关联节点本文采用此方式灵活度高顺序存储用数组存储节点若父节点下标为i则左子节点下标为2i1右子节点为2i2适合完全二叉树节省指针空间。二、基于Java的二叉搜索树BST完整实现1. 项目结构规范实际开发中建议遵循包名规范避免类名冲突com.binarytree // 二叉树模块包 ├── entity // 实体类包 │ └── TreeNode.java // 二叉树节点类 ├── core // 核心逻辑包 │ └── BinaryTree.java // 二叉树操作类 └── test // 测试包 └── BinaryTreeTest.java // 功能测试类2. 节点实体类TreeNode.javapackagecom.qcby_1216.binarytree.entity;/** * 二叉树节点实体类 * 采用链式存储方式通过左右指针关联子节点 * author 你的署名 * date 2025-12-18 */publicclassTreeNode{// 左子节点指针publicTreeNodelChild;// 右子节点指针publicTreeNoderChild;// 节点存储的数据支持Integer类型可扩展为泛型publicIntegerdata;/** * 构造方法初始化节点数据 * param data 节点存储的数值 */publicTreeNode(Integerdata){this.datadata;// 初始化时子节点指针默认为nullthis.lChildnull;this.rChildnull;}// 补充getter/setter方法提升代码封装性publicTreeNodegetlChild(){returnlChild;}publicvoidsetlChild(TreeNodelChild){this.lChildlChild;}publicTreeNodegetrChild(){returnrChild;}publicvoidsetrChild(TreeNoderChild){this.rChildrChild;}publicIntegergetData(){returndata;}publicvoidsetData(Integerdata){this.datadata;}}3. 核心操作类BinaryTree.javapackagecom.qcby_1216.binarytree.core;importcom.qcby_1216.binarytree.entity.TreeNode;importjava.util.LinkedList;importjava.util.Queue;/** * 二叉搜索树BST核心操作类 * 实现节点插入、多方式遍历、节点查询等功能 * author 你的署名 * date 2025-12-18 */publicclassBinaryTree{// 二叉树根节点树的入口初始为nullprivateTreeNoderoot;/** * 向二叉搜索树中插入节点 * 遵循BST规则左子树值 根值 右子树值 * param value 待插入的节点值非null * throws IllegalArgumentException 若value为null则抛出异常 */publicvoidinsert(Integervalue){// 1. 入参校验避免空值插入if(valuenull){thrownewIllegalArgumentException(节点值不能为null);}// 2. 创建新节点TreeNodenewNodenewTreeNode(value);// 3. 根节点为空时新节点作为根if(rootnull){rootnewNode;return;}// 4. 遍历树找到插入位置TreeNodecurrentroot;while(true){// 新节点值 当前节点值 → 向右子树查找if(current.getData()value){if(current.getrChild()null){current.setrChild(newNode);return;}currentcurrent.getrChild();}else{// 新节点值 ≤ 当前节点值 → 向左子树查找if(current.getlChild()null){current.setlChild(newNode);return;}currentcurrent.getlChild();}}}/** * 先序遍历递归实现根 → 左 → 右 * param node 当前遍历的节点 */publicvoidpreOrder(TreeNodenode){if(nodenull){return;}// 1. 访问当前节点System.out.print(node.getData() );// 2. 递归遍历左子树preOrder(node.getlChild());// 3. 递归遍历右子树preOrder(node.getrChild());}/** * 中序遍历递归实现左 → 根 → 右 * 二叉搜索树的中序遍历结果为升序序列 * param node 当前遍历的节点 */publicvoidinOrder(TreeNodenode){if(nodenull){return;}inOrder(node.getlChild());System.out.print(node.getData() );inOrder(node.getrChild());}/** * 后序遍历递归实现左 → 右 → 根 * param node 当前遍历的节点 */publicvoidpostOrder(TreeNodenode){if(nodenull){return;}postOrder(node.getlChild());postOrder(node.getrChild());System.out.print(node.getData() );}/** * 层次遍历广度优先按层级从上到下、从左到右访问 * 借助队列实现避免递归栈溢出 * param root 树的根节点 */publicvoidlevelOrder(TreeNoderoot){if(rootnull){System.out.println(二叉树为空);return;}// 使用Queue接口LinkedList实现存储待访问节点QueueTreeNodequeuenewLinkedList();queue.offer(root);while(!queue.isEmpty()){TreeNodenodequeue.poll();// 访问当前节点System.out.print(node.getData() );// 左子节点入队if(node.getlChild()!null){queue.offer(node.getlChild());}// 右子节点入队if(node.getrChild()!null){queue.offer(node.getrChild());}}}/** * 根据值查询节点BST优化查询 * 时间复杂度O(logn)平衡BST最坏O(n)倾斜树 * param value 待查询的节点值 * return 找到则返回节点否则返回null */publicTreeNodesearch(Integervalue){if(valuenull||rootnull){returnnull;}TreeNodecurrentroot;while(current!null){if(current.getData().equals(value)){returncurrent;}elseif(current.getData()value){currentcurrent.getrChild();}else{currentcurrent.getlChild();}}returnnull;}// 补充根节点getter方法供测试类调用publicTreeNodegetRoot(){returnroot;}}4. 功能测试类BinaryTreeTest.javapackagecom.qcby_1216.binarytree.test;importcom.qcby_1216.binarytree.core.BinaryTree;importcom.qcby_1216.binarytree.entity.TreeNode;/** * 二叉搜索树功能测试类 * 验证插入、遍历、查询等核心功能 * author 你的署名 * date 2025-12-18 */publicclassBinaryTreeTest{publicstaticvoidmain(String[]args){// 1. 初始化二叉树BinaryTreebstnewBinaryTree();// 2. 插入节点构建BSTInteger[]values{5,3,7,0,4,6,9};for(Integerval:values){bst.insert(val);System.out.println(插入节点 val 成功);}// 3. 测试遍历功能System.out.println(\n 遍历结果测试 );System.out.print(先序遍历根→左→右);bst.preOrder(bst.getRoot());// 输出5 3 0 4 7 6 9System.out.print(\n中序遍历左→根→右);bst.inOrder(bst.getRoot());// 输出0 3 4 5 6 7 9升序System.out.print(\n后序遍历左→右→根);bst.postOrder(bst.getRoot());// 输出0 4 3 6 9 7 5System.out.print(\n层次遍历广度优先);bst.levelOrder(bst.getRoot());// 输出5 3 7 0 4 6 9// 4. 测试节点查询功能System.out.println(\n\n 节点查询测试 );Integertarget14;TreeNodenode1bst.search(target1);if(node1!null){System.out.println(成功找到值为 target1 的节点);}else{System.out.println(未找到值为 target1 的节点);}Integertarget28;TreeNodenode2bst.search(target2);if(node2!null){System.out.println(成功找到值为 target2 的节点);}else{System.out.println(未找到值为 target2 的节点);}}}三、代码运行结果与深度解析1. 运行输出结果插入节点 5 成功 插入节点 3 成功 插入节点 7 成功 插入节点 0 成功 插入节点 4 成功 插入节点 6 成功 插入节点 9 成功 遍历结果测试 先序遍历根→左→右5 3 0 4 7 6 9 中序遍历左→根→右0 3 4 5 6 7 9 后序遍历左→右→根0 4 3 6 9 7 5 层次遍历广度优先5 3 7 0 4 6 9 节点查询测试 成功找到值为 4 的节点 未找到值为 8 的节点2. 二叉树结构可视化插入{5,3,7,0,4,6,9}后BST的结构为5 / \ 3 7 / \ / \ 0 4 6 93. 核心逻辑深度解析1BST插入的“有序性”保证BST的插入规则强制左子树值 根值 右子树值因此中序遍历结果必然是升序序列——这是BST用于“有序数据存储/快速查找”的核心原因。2遍历的本质差异递归遍历先/中/后序借助JVM栈实现“深度优先”代码简洁但递归深度过大会导致栈溢出如树深度超过1000层次遍历广度优先借助队列实现“层级访问”避免栈溢出问题适合处理大规模树结构。3BST查询的效率边界BST的查询效率依赖树的“平衡性”平衡BST如AVL树查询时间复杂度为O(logn)倾斜BST如插入{1,2,3,4,5}树退化为链表查询时间复杂度降至O(n)。四、实战扩展解决BST的“倾斜问题”普通BST在极端插入顺序下会退化为链表可通过AVL树平衡二叉树解决核心是通过旋转操作维持树的高度平衡左右子树高度差不超过1。以下是AVL树的核心旋转逻辑示例基于本文BinaryTree类扩展/** * AVL树左旋转解决右子树过高问题 * param node 失衡节点 * return 旋转后的新根节点 */privateTreeNodeleftRotate(TreeNodenode){TreeNodenewRootnode.getrChild();TreeNodetempnewRoot.getlChild();// 旋转newRoot.setlChild(node);node.setrChild(temp);// 更新节点高度需补充height属性updateHeight(node);updateHeight(newRoot);returnnewRoot;}/** * AVL树右旋转解决左子树过高问题 * param node 失衡节点 * return 旋转后的新根节点 */privateTreeNoderightRotate(TreeNodenode){TreeNodenewRootnode.getlChild();TreeNodetempnewRoot.getrChild();// 旋转newRoot.setrChild(node);node.setlChild(temp);// 更新节点高度updateHeight(node);updateHeight(newRoot);returnnewRoot;}
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

做设计找图片的网站找客户的100个渠道

Anything-LLM:为何它在同类AI平台中脱颖而出? 想象一下这样的场景:一家中型企业的HR部门刚发布了一份新的差旅报销政策,紧接着,几十名员工开始通过内部通讯工具反复询问“住宿标准是多少”“高铁票能不能报销”。以往&…

张小明 2026/1/8 0:58:22 网站建设

网站如何在工信部备案网站运营队伍与渠道建设

打造24小时在线客服:用Linly-Talker构建数字员工 在客户对服务响应速度越来越敏感的今天,企业正面临一个现实难题:如何以可控成本提供全天候、高质量的客户服务?人工客服难以做到724小时无间断响应,且服务质量受情绪、…

张小明 2026/1/8 0:58:07 网站建设

网站建设课程 谷建网站开发的心得体会

第一章:Open-AutoGLM能否改变传统气象预警?随着人工智能技术的快速发展,气象预警系统正迎来一场由大模型驱动的范式变革。Open-AutoGLM作为一种融合了自然语言理解与自动化推理能力的开源大模型,具备处理多源异构数据的能力&#…

张小明 2026/1/8 0:58:09 网站建设

什么是网站设计与运营西安官网优化哪家公司好

Langchain-Chatchat语义理解能力边界测试报告 在企业知识管理日益智能化的今天,一个核心挑战正摆在我们面前:如何让AI真正“读懂”组织内部那些非公开、高专业性的文档?通用大模型虽然见多识广,但在面对公司制度文件、技术白皮书或…

张小明 2026/1/8 0:58:08 网站建设

东莞企业模板建站网页设计作业成品导航条代码

目录 向量搜索(Vector Search) 支持的向量类型 向量搜索选项 VectorProperty Top 和 Skip IncludeVectors Filter 小结 Semantic Kernel 提供了向量存储(Vector Store)抽象层中的向量搜索功能,支持多种选项如过…

张小明 2026/1/9 3:39:42 网站建设

高端自适应网站开发自助建站平台网站

5分钟上手Cesium-Wind:打造惊艳3D风场可视化的终极指南 【免费下载链接】cesium-wind wind layer of cesium 项目地址: https://gitcode.com/gh_mirrors/ce/cesium-wind Cesium-Wind是一个基于Cesium.js的开源风场可视化库,能够将复杂的气象数据转…

张小明 2026/1/9 23:15:21 网站建设