Vue3嵌套导航相对路径问题

有如下的页面设计,页面上方第一次导航,两个菜单,首页和新闻
点击新闻,内容里面嵌套一个左侧和右侧,左侧有4条新闻,点击某一条新闻,右侧显示详情

代码如下:

​
File Path: d:\hello\src\App.vue
<template><div id="app"><nav><router-link to="/">Home</router-link><router-link to="/news">News</router-link></nav><router-view></router-view> <!-- 用于渲染当前路由匹配的组件 --></div>
</template><script lang="ts">
export default {name: 'App'
};
</script><style>
nav {display: flex;justify-content: center;margin-bottom: 20px;
}nav a {margin: 0 15px;text-decoration: none;color: #42b983;
}
</style>File Path: d:\hello\src\views\NewsDetail.vue
<template><div><h2>News Detail {{ id }}</h2><p>This is the detail of the news with ID: {{ id }}</p></div>
</template><script lang="ts">
import { defineComponent, computed, onMounted } from 'vue'; // 确保只导入一次
import { useRoute } from 'vue-router';export default defineComponent({name: 'NewsDetail',setup() {const route = useRoute();const id = computed(() => route.params.id);// 在组件挂载时打印 IDonMounted(() => {console.log('Entered NewsDetail with ID:', route.params.id);});return { id };}
});
</script>File Path: d:\hello\src\router\index.ts
import { createRouter, createWebHistory } from 'vue-router';
import Home from '../views/HomeView.vue'; // 确保路径正确
import News from '../views/News.vue'; // 确保路径正确
import NewsDetail from '../views/NewsDetail.vue'; // 确保路径正确const routes = [{path: '/',name: 'Home',component: Home},{path: '/news',name: 'News',component: News,children: [{path: 'detail/:id', // 使用动态参数name: 'NewsDetail',component: NewsDetail}]}
];const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes
});export default router;File Path: d:\hello\src\views\News.vue
<template><div><h1>News</h1><ul><li><router-link to="detail/1">News Detail 1</router-link></li><li><router-link to="news/detail/2">News Detail 2</router-link></li><a href="detail/1">a标签 news 3</a></ul><router-view></router-view> <!-- 用于渲染子路由的内容 --></div>
</template><script lang="ts">
export default {name: 'News',mounted() {console.log(this.$route.path); // 这里可以访问当前路径}
};
</script>File Path: d:\hello\src\main.ts
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';const app = createApp(App);app.use(router);app.mount('#app');File Path: d:\hello\src\views\HomeView.vue
<template><div><h1>Welcome to the Home Page</h1><p>This is the home page content.</p></div>
</template><script lang="ts">
export default {name: 'HomeView'
};
</script>File Path: d:\hello\src\views\AboutView.vue
<template><div class="about"><h1>This is an about page</h1></div>
</template><style>
@media (min-width: 1024px) {.about {min-height: 100vh;display: flex;align-items: center;}
}
</style>​

首先点击 首页,然后点击新闻,当前的网址是:
http://localhost:5173/news
然后点击News detail 1,发现网址变成了:
http://localhost:5173/detail/1

 并且页面空白了,因为没有找到路由/detail
为什么会跳转到 http://localhost:5173/detail/1 而不是 http://localhost:5173/news/detail/1,这里不是写的相对路径吗?
可以参考下面的a标签,也是这样跳转的,个人觉得在当前路径是http://localhost:5173/news的时候,访问相对路径detail,就相当于一个文件夹是http://localhost:5173/,news相当于news.html,而detail和他是同级的,所以相对路径会解析为http://localhost:5173/detail
而路由中,detail和news不是同级关系
如果要写相对路径,也只能写成

to="news/detail/1"

即使写成./detail/1也不行 
这里是讨论相对路径的问题,当然,写成下面也是可以的

:to="{ name: 'NewsDetail', params: { id: 1 } }"






----------
 

Vue3 嵌套导航相对路径问题

在现代前端开发中,使用 Vue.js 进行单页面应用(SPA)的构建已成为一种趋势。Vue3 引入了许多新特性,使得开发变得更加灵活和高效。然而,在处理嵌套路由时,相对路径的问题往往会让开发者感到困惑。

页面设计

设想一个简单的页面设计:在页面的顶部有一个导航栏,用户可以选择 “首页” 和 “新闻”。当用户点击 “新闻” 时,页面中会显示一个包含左侧和右侧的布局。在左侧,用户可以看到四条新闻,点击其中一条后,右侧会显示该新闻的详细信息。

路由配置

在 Vue3 中,路由的配置是通过 vue-router 来实现的。以下是路由的基本配置:

javascript

Copy

const routes = [{path: '/',name: 'Home',component: Home},{path: '/news',name: 'News',component: News,children: [{path: 'detail/:id',name: 'NewsDetail',component: NewsDetail}]}
];

在这个配置中,/news 路由下嵌套了一个 detail/:id 路由,用于显示新闻的详细信息。

相对路径的问题

当用户在 /news 路由下点击某个新闻链接时,理应跳转到 /news/detail/1。然而,开发者可能会发现,点击链接后,浏览器跳转到了 /detail/1,导致页面空白。这是因为 Vue Router 在解析相对路径时,默认是从根路径 / 开始的。

这种情况下,用户需要明确指定完整的相对路径,例如:

html

Copy

<router-link to="detail/1">News Detail 1</router-link>

或者使用命名路由:

html

Copy

<router-link :to="{ name: 'NewsDetail', params: { id: 1 } }">News Detail 1</router-link>

深入理解 Vue Router

在 Vue Router 中,路由的解析是基于路径的层级结构。当你在 /news 路由下执行相对路径跳转时,Vue Router 会根据当前路由的层级关系来解析路径。因此,理解路由的层级结构对于正确使用相对路径至关重要。

例如,若当前路径为 /news,想要访问 /news/detail/1,则需要使用相对路径 detail/1,而不是直接使用 detail/1。这就像在文件系统中,想要从一个文件夹访问另一个文件夹下的文件,必须明确指定路径。

结论

在 Vue3 中处理嵌套路由时,理解相对路径的解析机制是非常重要的。通过合理配置路由和使用合适的路径表示法,开发者可以避免常见的路径解析错误,从而提升用户体验。希望本文能帮助你更好地理解 Vue3 中嵌套导航的相对路径问题,提升你的开发效率。


 

进一步探索 Vue3 嵌套导航的最佳实践

在深入理解 Vue3 中嵌套导航的相对路径问题后,我们可以探讨一些最佳实践,以确保在项目中高效且无误地使用这些特性。

1. 使用命名路由

命名路由不仅能提高代码的可读性,还能减少路径错误的可能性。使用命名路由时,开发者可以避免手动拼接路径,从而提高代码的可维护性。例如:

html

Copy

<router-link :to="{ name: 'NewsDetail', params: { id: news.id } }">{{ news.title }}
</router-link>

这种方式使得代码更具可读性,并且在路由变化时,开发者不需要担心路径的调整。

2. 路由守卫

在复杂的应用程序中,可能需要在路由切换时执行一些逻辑,比如权限验证或数据预加载。使用 Vue Router 的路由守卫,可以在进入某个路由之前进行检查:

javascript

Copy

router.beforeEach((to, from, next) => {if (to.name === 'NewsDetail' && !userIsLoggedIn()) {next({ name: 'Login' });} else {next();}
});

这种方式能够确保用户在访问特定页面前满足某些条件,从而提升应用的安全性。

3. 动态路由匹配

在处理新闻详情时,通常会有多个新闻项。利用动态路由匹配,可以轻松实现这一功能。通过在路由中定义动态参数,Vue Router 会自动解析并传递参数:

javascript

Copy

{path: '/news/detail/:id',name: 'NewsDetail',component: NewsDetail
}

在 NewsDetail 组件中,可以通过 this.$route.params.id 获取当前新闻的 ID,从而加载相应的数据。

4. 组件懒加载

为了提升应用的性能,尤其是在大型应用中,使用组件懒加载是一个不错的选择。通过 import() 函数,可以实现路由的按需加载:

javascript

Copy

const NewsDetail = () => import('./components/NewsDetail.vue');const routes = [{path: '/news/detail/:id',name: 'NewsDetail',component: NewsDetail}
];

这种方式不仅可以减少初始加载时间,还能提升用户体验。

5. 设计良好的用户体验

在嵌套导航中,良好的用户体验至关重要。可以考虑以下几点:

  • 面包屑导航:帮助用户了解当前页面的位置,并方便地返回上级页面。
  • 加载指示器:在数据加载时提供视觉反馈,提升用户的等待体验。
  • 错误处理:处理路由错误时,提供友好的错误页面,避免用户感到困惑。

6. 维护良好的代码结构

在大型项目中,代码的结构和组织显得尤为重要。建议将路由配置、组件和视图分开管理,保持代码的清晰和可维护性。例如,可以在 router 目录中集中管理所有路由配置,在 views 目录中集中管理所有视图组件。

总结

在 Vue3 中,嵌套导航和相对路径的管理虽然可能会带来一些挑战,但通过合理的设计和最佳实践,可以有效地解决这些问题。无论是使用命名路由、动态路由匹配,还是组件懒加载,都是提升开发效率和用户体验的有效手段。

希望通过本篇文章的深入探讨,能够帮助开发者在实际项目中更好地应用 Vue3 的嵌套导航特性,构建出更高效、用户友好的应用。随着前端技术的不断发展,掌握这些技巧将为你的开发之路铺平道路。


 

深入理解 Vue3 的嵌套导航与状态管理

在构建复杂的 Vue3 应用时,除了嵌套导航和路由管理,状态管理同样是一个不可忽视的方面。Vuex 是 Vue.js 官方的状态管理库,能够帮助我们在多个组件间共享状态。结合 Vue Router 使用时,可以使得应用的结构更加清晰和高效。

1. Vuex 与嵌套导航的结合

在处理嵌套导航时,可能需要在不同的页面之间共享数据。例如,在新闻列表页面和新闻详情页面之间,用户可能需要看到相同的新闻数据。通过 Vuex,我们可以将这些数据存储在全局状态中,方便各个组件访问。

Vuex Store 示例

javascript

Copy

import Vue from 'vue';
import Vuex from 'vuex';Vue.use(Vuex);export default new Vuex.Store({state: {newsList: [],currentNews: null},mutations: {setNewsList(state, news) {state.newsList = news;},setCurrentNews(state, news) {state.currentNews = news;}},actions: {fetchNews({ commit }) {// 假设有一个 API 获取新闻数据fetch('/api/news').then(response => response.json()).then(data => {commit('setNewsList', data);});},fetchNewsDetail({ commit }, id) {fetch(`/api/news/${id}`).then(response => response.json()).then(data => {commit('setCurrentNews', data);});}}
});

在这个例子中,我们定义了一个 Vuex store,包含新闻列表和当前新闻的状态,以及相应的 mutations 和 actions。

2. 在组件中使用 Vuex

在新闻列表组件中,我们可以通过 Vuex 获取新闻数据:

javascript

Copy

<template><div><h1>新闻列表</h1><ul><li v-for="news in newsList" :key="news.id"><router-link :to="{ name: 'NewsDetail', params: { id: news.id } }">{{ news.title }}</router-link></li></ul></div>
</template><script>
import { mapState } from 'vuex';export default {computed: {...mapState(['newsList'])},created() {this.$store.dispatch('fetchNews');}
};
</script>

在新闻详情组件中,我们可以根据路由参数获取当前新闻的数据:

javascript

Copy

<template><div><h1>{{ currentNews.title }}</h1><p>{{ currentNews.content }}</p></div>
</template><script>
import { mapState } from 'vuex';export default {computed: {...mapState(['currentNews'])},created() {const newsId = this.$route.params.id;this.$store.dispatch('fetchNewsDetail', newsId);}
};
</script>

3. 处理异步数据与加载状态

在处理数据时,尤其是从 API 获取数据时,可能会遇到加载状态和错误处理的问题。可以在 Vuex 中添加状态管理,以便在组件中进行相应的处理。

Vuex Store 示例(添加加载状态)

javascript

Copy

export default new Vuex.Store({state: {newsList: [],currentNews: null,isLoading: false,error: null},mutations: {setLoading(state, isLoading) {state.isLoading = isLoading;},setError(state, error) {state.error = error;}},actions: {async fetchNews({ commit }) {commit('setLoading', true);try {const response = await fetch('/api/news');const data = await response.json();commit('setNewsList', data);} catch (error) {commit('setError', error.message);} finally {commit('setLoading', false);}}}
});

在组件中,我们可以根据 isLoading 和 error 状态来显示相应的加载指示器或错误信息:

javascript

Copy

<template><div><h1>新闻列表</h1><div v-if="isLoading">加载中...</div><div v-if="error">错误: {{ error }}</div><ul><li v-for="news in newsList" :key="news.id"><router-link :to="{ name: 'NewsDetail', params: { id: news.id } }">{{ news.title }}</router-link></li></ul></div>
</template><script>
import { mapState } from 'vuex';export default {computed: {...mapState(['newsList', 'isLoading', 'error'])},created() {this.$store.dispatch('fetchNews');}
};
</script>

结论

通过结合 Vue Router 和 Vuex,我们可以构建出更加高效和灵活的 Vue3 应用。嵌套导航和状态管理的合理使用,不仅提升了应用的性能和用户体验,也使得代码的可维护性大大增强。在实际开发中,掌握这些技巧将帮助你更好地应对复杂的应用需求,提升开发效率。希望这篇文章能够为你的 Vue3 学习之旅提供帮助和启发。

 

进阶:优化 Vue3 应用的性能

在构建复杂的 Vue3 应用时,性能优化是一个不可忽视的方面。随着应用规模的扩大,用户的体验可能会受到影响。因此,了解并应用一些性能优化的策略是非常重要的。以下是一些有效的优化方法:

1. 组件懒加载

如前所述,使用组件懒加载可以显著减少初始加载时间。结合 Vue Router 的动态导入,可以在用户访问特定路由时才加载相应的组件。

javascript

Copy

const NewsDetail = () => import('./components/NewsDetail.vue');

这种方法不仅能减少初始包的大小,还能提高应用的响应速度。

2. 使用计算属性和侦听器

在 Vue 中,计算属性是基于其依赖进行缓存的,只有在依赖发生变化时才会重新计算。这意味着,如果你有一些复杂的逻辑,可以将其放入计算属性中,从而避免不必要的重复计算。

javascript

Copy

computed: {filteredNews() {return this.newsList.filter(news => news.isVisible);}
}

同样,侦听器可以帮助你监控数据变化,并在数据变化时执行某些操作。例如,在用户输入搜索条件时,你可以使用侦听器来更新显示的新闻列表。

3. 使用虚拟滚动

当展示大量数据时,直接渲染所有数据会导致性能下降。使用虚拟滚动技术可以只渲染可见区域的组件,从而提升性能。可以借助第三方库如 vue-virtual-scroller 来实现这一功能。

html

Copy

<virtual-scroller :items="newsList"><template v-slot="{ item }"><div>{{ item.title }}</div></template>
</virtual-scroller>

4. 事件节流和防抖

在处理频繁触发的事件(如滚动、输入等)时,使用节流和防抖技术可以有效减少事件处理的次数,从而提高性能。

  • 防抖:在事件触发后,延迟执行函数,只有在特定时间内没有再次触发时才会执行。

javascript

Copy

methods: {debounce(func, delay) {let timer;return function(...args) {clearTimeout(timer);timer = setTimeout(() => func.apply(this, args), delay);};}
}

  • 节流:限制函数在一定时间内只能执行一次。

javascript

Copy

methods: {throttle(func, limit) {let lastFunc;let lastRan;return function(...args) {if (!lastRan) {func.apply(this, args);lastRan = Date.now();} else {clearTimeout(lastFunc);lastFunc = setTimeout(() => {if (Date.now() - lastRan >= limit) {func.apply(this, args);lastRan = Date.now();}}, limit - (Date.now() - lastRan));}};}
}

5. 适时使用 v-if 和 v-show

在 Vue 中,v-if 和 v-show 用于条件渲染组件。v-if 会在条件为假时完全销毁组件,而 v-show 仅仅是切换组件的显示状态。对于频繁切换的组件,使用 v-show 更加高效;而对于不常显示的组件,使用 v-if 则更节省资源。

html

Copy

<div v-if="isVisible">这个组件会被销毁</div>
<div v-show="isVisible">这个组件不会被销毁</div>

6. 使用 Web Workers

对于计算密集型的任务,可以考虑使用 Web Workers。在主线程中执行繁重的计算会导致 UI 卡顿,而 Web Workers 可以在后台线程中处理这些任务,从而保持界面的流畅性。

javascript

Copy

const worker = new Worker('path/to/worker.js');
worker.postMessage(data);
worker.onmessage = function(event) {console.log('Result from worker:', event.data);
};

结论

优化 Vue3 应用的性能是一个持续的过程。通过合理使用组件懒加载、计算属性、虚拟滚动、事件节流和防抖等技术,可以显著提升应用的响应速度和用户体验。此外,结合 Vuex 进行状态管理,可以有效地减少不必要的渲染和数据请求,进一步提高性能。

希望这篇文章为你的 Vue3 开发提供了有价值的见解和实用的建议。随着技术的不断进步,保持学习和实践的态度,将帮助你在前端开发的道路上走得更远。

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

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

相关文章

【AIGC】ChatGPT提示词Prompt高效编写模式:思维链、Self-Consistency CoT与Zero-Shot CoT

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;思维链 (Chain of Thought, CoT)如何工作应用实例优势结论 &#x1f4af;一致性思维链 (Self-Consistency CoT)如何工作应用实例优势结论 &#x1f4af;零样本思维链 (Ze…

详细分析Redisson分布式锁中的renewExpiration()方法

目录 一、Redisson分布式锁的续期 整体分析 具体步骤和逻辑分析 为什么需要递归调用&#xff1f; 定时任务的生命周期&#xff1f; 一、Redisson分布式锁的续期 Redisson是一个基于Redis的Java分布式锁实现。它允许多个进程或线程之间安全地共享资源。为了实现这一点&…

51单片机数码管循环显示0~f

原理图&#xff1a; #include <reg52.h>sbit dulaP2^6;//段选信号 sbit welaP2^7;//位选信号unsigned char num;//数码管显示的数字0~funsigned char code table[]{ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//定义数码管显…

web前端-----html5----用户注册

以改图为例 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>用户注册</title> </hea…

彩色图片转灰度图

目录 原始彩色图片灰度图片代码 原始彩色图片 这张图片是原始的彩色图片&#xff0c;我们可以看到它的形状是 cloud is shape: (563, 703, 3)。 灰度图片 这张图片是将原始彩色图片转换为灰度后的图片&#xff0c;它的形状是 cloud_gary is shape: (563, 703)。 代码 以下是…

(C/C++)文件

目录 1. 为什么使用文件 2. 什么是文件 2.1 程序文件 2.2 数据文件 3. 文件的打开和关闭 3.1 文件指针 3.2 文件的打开和关闭 4. 文件的顺序读写 fputc fgetc fputs fgets fprintf fscanf fwrite fread sprintf和sscanf snprintf ​编辑 4对比一组函数(prin…

【启明智显分享】ZX7981PM WIFI6 5G-CPE:2.5G WAN口,2.4G/5G双频段自动调速

昨天&#xff0c;我们向大家展现了ZX7981PG WIFI6 5G-CPE&#xff0c;它强大的性能也引起了一波关注&#xff0c;与此同时&#xff0c;我们了解到部分用户对更高容量与更高速网口的需求。没关系&#xff01;启明智显早就预料到了&#xff01;ZX7981PM满足你的需求&#xff01; …

reac nodejs 实现代码编辑器

地址 https://github.com/xiaobaidadada/filecat 说明

九盾叉车高位显示器:重塑叉车视界,引领高位精准

在繁忙的物流与仓储中&#xff0c;叉车不仅是力量与效率的化身&#xff0c;更是精准与安全的守护者。九盾安防&#xff0c;以科技之名&#xff0c;打造叉车高位显示器&#xff0c;彻底革新了货叉升降的盲区挑战&#xff0c;为物流、仓储及码头等领域带来了前所未有的作业体验。…

CTFHUB技能树之SQL——时间盲注

开启靶场&#xff0c;打开链接&#xff1a; 说明这关对所有信息都做了统一输出&#xff0c;换成延时注入试试 输入&#xff1a; 1 and sleep(15) &#xff08;这里不知道为什么加上--倒是会影响sleep()函数的触发&#xff0c;从而没有延时感&#xff09; 可以观察到有明显的延…

C++11新特性(4)

目录 1.包装器 2.线程库 2.1thread类的简单介绍 2.2线程函数参数 2.3原子性操作库(atomic) 2.4lock_guard与unique_lock 2.5mutex的种类 1. std::mutex 2. std::recursive_mutex 3. std::timed_mutex 4. std::recursive_timed_mutex 2.6lock_guard 2.7unique_lock 3.支持两个线…

【vue】指令补充+样式绑定+计算属性+侦听器

代码获取 知识总结 ⼀、指令补充 1.指令修饰符 1.1 什么是指令修饰符&#xff1f; 所谓指令修饰符就是让指令的 功能更强⼤&#xff0c;书写更便捷 1.2 分类 1.2.1 按键修饰符 keydown.enter&#xff1a;当enter键按下时触发 keyup.enter&#xff1a;当enter键抬起时触…

如何看待阿里通义千问团队发布Qwen2.5 MATH,效果怎么样,这是中国的草莓吗?

Qwen2.5-Math的发布标志着在数学问题解决领域的一个重要进展。这个由阿里通义千问团队发布的模型系列&#xff0c;通过结合Chain-of-Thought (CoT)和Tool-integrated Reasoning (TIR)技术&#xff0c;提升了对中英文数学问题的解决能力。Qwen2.5-Math系列包括基础模型和经过指令…

CentOS 7 yum失效的解决办法

文章目录 一、CentOS 7停止维护导致yum失效的解决办法解决方案 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、CentOS 7停止维护导致yum失效的解决办法 020 年&#xff0c;CentOS 项目与红帽联合宣布将全部投资转向 CentOS Stream&#xff0c;这是…

个人健康系统|个人健康数据管理系统|基于小程序+java的个人健康数据管理系统设计与实现(源码+数据库+文档)

个人健康数据管理系统 目录 基于小程序java的个人健康数据管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师…

C#学习笔记(一)

C#学习笔记&#xff08;一&#xff09; 简介第一章 上位机开发环境之 VS 使用和.NET 平台基础一、安装软件二、创建项目三、第一个Hello world四、解决方案与项目五、Debug 和 Release 的区别六、代码的生产过程七、CLR的其它功能 简介 C# .NET工控上位机开发 在工控领域&…

VMware虚拟机连不上网络,但VMware网络服务和网络适配器均正常

此教程适用于VMware虚拟机连不上网络&#xff0c;但检查VMware网络服务和网络适配器均正常的场景&#xff0c;遇到问题的为凝思Linux6.0.80系统&#xff0c;其他系统遇到同样问题应该也可以试试 问题描述&#xff1a; 使用凝思Linux系统&#xff0c;配置了两个网卡&#xff1…

web API基础

作用和分类 作用: 就是使用 JS 去操作 html 和浏览器 分类&#xff1a; DOM (文档对象模型)、 BOM &#xff08;浏览器对象模型&#xff09; 什么是DOM DOM (Document Object Model) 译为文档对象模型&#xff0c;是 HTML 和 XML 文档的编程接口。 HTML DOM 定义了访问和操作 …

2024 OSCAR|《开源体系建设路径模式洞察与建议》即将发布

近年来&#xff0c;开源体系建设受到高度重视&#xff0c;国家软件发展战略和“十四五”规划纲要均对开源作出重要部署&#xff0c;为我国开源体系建设和发展指明了方向。9月25日&#xff0c;工业和信息化部党组书记、部长金壮指出要加强开源体系建设&#xff0c;助推产业高质量…

数据结构——树和森林

目录 树的存储结构 1、双亲表示法 2、孩子链表 3、孩子兄弟表示法 树与二叉树的转换 将树转换为二叉树 将二叉树转换为树 森林与二叉树的转化 森林转换成二叉树 二叉树转换为森林 树和森林的遍历 1、 树的遍历&#xff08;三种方式&#xff09; 2、森林的遍历 树的存…