建设部网站注册查询中文wordpress企业主题

张小明 2026/1/14 6:52:11
建设部网站注册查询,中文wordpress企业主题,汉中建设工程招标网,嘉兴seo报价一、二叉树的定义与基本概念二叉树是一种非线性数据结构#xff0c;每个节点最多包含 2 个子节点#xff08;左子节点、右子节点#xff09;#xff0c;核心特点#xff1a;#xff08;1#xff09;每个节点的子树数量不超过 2#xff1b;#xff08;2#xff09;左、…一、二叉树的定义与基本概念二叉树是一种非线性数据结构每个节点最多包含 2 个子节点左子节点、右子节点核心特点1每个节点的子树数量不超过 22左、右子树是有序的即使只有一个子树也需明确是左 / 右子树3可衍生出多种特殊结构如二叉搜索树、完全二叉树、满二叉树等。二、创建二叉树的常见方法1. 节点类定义二叉树的基础是 “节点”需包含数据域和指针域指向左 / 右子节点Java 实现示例package com.heima.Tree; public class TreeNode { // 左子节点指针 public TreeNode lChild; // 右子节点指针 public TreeNode rChild; // 数据域存储节点值 public Integer data; // 构造方法初始化节点数据 public TreeNode(Integer data) { this.data data; } }2. 手动创建二叉树以 “二叉搜索树” 为例通过create方法插入节点遵循二叉搜索树规则左子树值 父节点值 右子树值实现逻辑1若树为空新节点作为根节点2若树非空从根节点开始比较1新节点值 当前节点值 → 走右子树直到右子树为空插入新节点2新节点值 当前节点值 → 走左子树直到左子树为空插入新节点。Java 实现示例public class BinaryTree { // 树的根节点指针 private TreeNode root; // 插入节点的方法 public void create(Integer value) { // 新建节点 TreeNode newNode new TreeNode(value); // 情况1树为空 → 新节点作为根 if (root null) { root newNode; return; } // 情况2树非空 → 从根开始遍历插入 TreeNode curNode root; while (true) { // 新节点值 当前节点值 → 走右子树 if (curNode.data newNode.data) { // 右子树为空 → 插入新节点 if (curNode.rChild null) { curNode.rChild newNode; return; } // 右子树非空 → 继续遍历右子树 curNode curNode.rChild; } // 新节点值 当前节点值 → 走左子树 else { // 左子树为空 → 插入新节点 if (curNode.lChild null) { curNode.lChild newNode; return; } // 左子树非空 → 继续遍历左子树 curNode curNode.lChild; } } } }3. 调用方法构建二叉树创建BinaryTree对象多次调用create方法插入节点即可构建二叉树。示例插入值5、3、7、8、4、6、9public static void main(String[] args) { BinaryTree bt new BinaryTree(); bt.create(5); // 根节点 bt.create(3); // 5的左子节点 bt.create(7); // 5的右子节点 bt.create(8); // 7的右子节点 bt.create(4); // 3的右子节点 bt.create(6); // 7的左子节点 bt.create(9); // 8的右子节点 }最终构建的二叉搜索树结构5 / \ 3 7 \ / \ 4 6 8 \ 9三、二叉树的应用场景二叉树含其特殊结构在多领域有核心作用1表达式树表示数学表达式如a*(bc)根节点为*左子树为a右子树为(bc)2二叉搜索树实现高效的 “增删查”平均时间复杂度 O (logn)3堆结构实现优先队列大顶堆 / 小顶堆用于任务调度、TopK 问题等4哈夫曼编码树数据压缩如 ZIP 压缩通过字符出现频率构建树生成最短编码5决策树机器学习中用于分类 / 回归如 ID3、C4.5、CART 树6平衡二叉树如 AVL 树、红黑树解决普通二叉搜索树的 “退化成链表” 问题用于 JDK 集合如TreeMap。四、创建二叉树的注意事项1避免循环引用如节点的左 / 右子节点指向自身或祖先节点2递归创建大二叉树时注意栈溢出风险可改用迭代方式3空节点的表示需统一用null避免逻辑混乱4不同的 “插入 / 遍历顺序” 会生成不同结构的二叉树如同一组值按不同顺序插入二叉搜索树的形态会不同。五、二叉树的 4 种遍历方式遍历的核心是 “按规则访问树中所有节点且每个节点仅访问一次”。不同的遍历顺序对应不同的应用场景我们逐一解析。1. 先序遍历Preorder Traversal1概念与规则先序遍历的顺序是根节点 → 左子树 → 右子树。优先访问当前节点再递归处理左右子树。2遍历步骤1访问当前根节点如打印节点值2递归遍历左子树3递归遍历右子树。3示例以下二叉树的先序遍历结果为A → B → D → E → C → FA / \ B C / \ \ D E F// 先序遍历递归 public void preOrder(TreeNode root) { if (root null) { return; } // 1. 访问根节点 System.out.println(root.data); // 2. 递归左子树 preOrder(root.lChild); // 3. 递归右子树 preOrder(root.rChild); }4应用场景1目录结构打印先输出当前目录再遍历子目录2表达式树生成前缀表达式如 A * B C3树的序列化保存树结构以便重建。5复杂度1时间复杂度O(n)每个节点访问一次2空间复杂度递归方式为O(h)h 为树高非递归方式最坏为O(n)。2. 中序遍历In-order Traversal1概念与规则中序遍历的顺序是左子树 → 根节点 → 右子树。对于二叉搜索树BST中序遍历会得到升序的节点序列这是其最核心的特性。2示例以下二叉树的中序遍历结果为4 → 2 → 5 → 1 → 31 / \ 2 3 / \ 4 5// 中序遍历递归 public void inOrder(TreeNode root) { if (root null) { return; } // 1. 递归左子树 inOrder(root.lChild); // 2. 访问根节点 System.out.println(root.data); // 3. 递归右子树 inOrder(root.rChild); }3应用场景1二叉搜索树的升序遍历2表达式树生成中缀表达式如4 2 * 53编译原理中的语法树遍历。3. 后序遍历Postorder Traversal1概念与规则后序遍历的顺序是左子树 → 右子树 → 根节点。特点是 “最后访问根节点”常用于 “先处理子节点再处理父节点” 的场景。2示例以下二叉树的后序遍历结果为D → E → B → F → C → AA / \ B C / \ \ D E F// 后序遍历递归 public void postOrder(TreeNode root) { if (root null) { return; } // 1. 递归左子树 postOrder(root.lChild); // 2. 递归右子树 postOrder(root.rChild); // 3. 访问根节点 System.out.println(root.data); }3应用场景1表达式树计算结果如(34)*52文件系统删除先删子目录 / 文件再删父目录3内存释放先释放子节点再释放父节点。4. 层次遍历Level Order Traversal1概念与规则层次遍历也叫广度优先遍历BFS按 “层级顺序” 访问节点从根节点开始依次访问第 1 层、第 2 层…… 同一层从左到右访问。实现依赖队列先入队根节点出队时访问该节点并将其左右子节点入队循环直到队列为空。2示例Java 实现队列// 层次遍历基于队列 public void levelOrder(TreeNode root) { if (root null) { return; } // 创建队列根节点入队 QueueTreeNode queue new LinkedList(); queue.offer(root); while (!queue.isEmpty()) { // 出队并访问 TreeNode node queue.poll(); System.out.println(node.data); // 左子节点入队 if (node.lChild ! null) { queue.offer(node.lChild); } // 右子节点入队 if (node.rChild ! null) { queue.offer(node.rChild); } } }3应用场景1求二叉树的最小深度2展示家族 / 组织的层级关系3网络爬虫按链接层级抓取网页。六、二叉搜索树的节点查询对于二叉搜索树BST节点查询可以利用其 “左子树值 根节点值 右子树值” 的特性实现高效查找平均时间复杂度O(logn)。1查询逻辑1若当前节点为空返回null未找到2若当前节点值等于目标值返回该节点3若当前节点值 目标值递归查询右子树4若当前节点值 目标值递归查询左子树。2代码Java 实现// 二叉搜索树节点查询 public TreeNode findNode(TreeNode root, Integer target) { // 树为空未找到 if (root null) { return null; } // 找到目标节点 if (root.data.equals(target)) { return root; } // 目标值更大查右子树 else if (root.data target) { return findNode(root.rChild, target); } // 目标值更小查左子树 else { return findNode(root.lChild, target); } }七、总结
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

中山网站运营wordpress 的论坛模板

超越技术,软技能点亮测试之路 在数字化浪潮席卷全球的今天,软件测试作为确保产品质量的关键环节,早已不再局限于纯技术层面。随着敏捷开发、DevOps和人工智能测试工具的普及,测试从业者若仅依赖硬技能(如自动化脚本编…

张小明 2026/1/11 15:15:59 网站建设

做微整的网站站长之家域名

想要深入理解软件设计模式,提升代码质量吗?《Design Patterns-Elements of Reusable Object-Oriented Software》这本经典著作绝对值得你拥有!📚 本书由四位软件工程大师Erich Gamma、Richard Helm、Ralph Johnson和John Vlisside…

张小明 2026/1/13 7:05:58 网站建设

网站建设流行技术网络营销外包合同模板

5个步骤教你用AI模型实现高效数据标注预处理 【免费下载链接】Annotators 项目地址: https://ai.gitcode.com/hf_mirrors/lllyasviel/Annotators 还在为海量图像数据标注发愁吗?面对成千上万张需要处理的图片,传统的手工标注方式不仅效率低下&am…

张小明 2026/1/11 18:04:02 网站建设

网站建设策划书范文网站信息化建设案例

想要在PC端畅玩赛马娘却苦于日文界面?umamusume-localify汉化补丁正是您需要的解决方案!这款专为《赛马娘: Pretty Derby》DMM客户端设计的本地化工具,不仅提供完整中文显示,还集成了帧率解锁、分辨率优化等实用功能,让…

张小明 2026/1/12 8:41:33 网站建设

seo网站设计哪里好大凤号 网站建设

RDPWrap完整配置指南:解锁Windows多用户远程桌面功能 【免费下载链接】rdpwrap.ini RDPWrap.ini for RDP Wrapper Library by StasM 项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini 想要让多人在同一台Windows电脑上同时进行远程桌面连接吗&…

张小明 2026/1/13 1:31:06 网站建设

五屏网站建设怎样百度快照怎么使用

2000免费图标任你选:Remix Icon完全使用指南 【免费下载链接】RemixIcon Open source neutral style icon system 项目地址: https://gitcode.com/gh_mirrors/re/RemixIcon 还在为项目找不到合适的图标而烦恼吗?Remix Icon开源图标库为你提供了完…

张小明 2026/1/13 22:08:42 网站建设