news 2026/2/16 4:50:34

1.16 - 二叉树的中序遍历 动态多态的实现原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
1.16 - 二叉树的中序遍历 动态多态的实现原理

目录

1.二叉树的中序遍历

a.核心思想

b.思路

c.步骤

2.动态多态的实现原理

a.核心思想

b.实现逻辑

c.示例逻辑


1.二叉树的中序遍历

94. 二叉树的中序遍历 - 力扣(LeetCode)https://leetcode.cn/problems/binary-tree-inorder-traversal/

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), * right(right) {} * }; */ class Solution { public: void inorder(TreeNode* root, std::vector<int>& res) { if (root == nullptr) return; inorder(root->left, res); res.push_back(root->val); inorder(root->right, res); } std::vector<int> inorderTraversal(TreeNode* root) { vector<int> res; inorder(root, res); return res; } };

a.核心思想

利用二叉树中序遍历的规则(左子树 -> 根节点 -> 右子树),通过递归的方式依次访问二叉树的节点,将访问到的节点值按顺序存储到结果数组中。

b.思路

定义一个递归函数,该函数接收当前节点和一个用于存储结果的引用数组作为参数。在递归函数中,首先判断当前节点是否为空,若为空则直接返回;否则,先递归遍历左子树,然后将当前节点的值加入结果数组,最后递归遍历右子树。

c.步骤

① 定义递归函数inorder,参数为当前节点root和结果数组的引用res

② 在inorder函数中,若root为空,返回。

③ 递归调用inorder遍历左子树。

④ 将root的值加入res

⑤ 递归调用inorder遍历右子树。

⑥ 在主函数中,初始化结果数组,调用inorder函数,返回结果数组。

2.动态多态的实现原理

a.核心思想

动态多态通过虚函数表(vtable)+ 虚指针(vptr) 实现运行时绑定,根据对象实际类型调用对应函数。

b.实现逻辑

① 虚函数表(vtable):编译器为每个含虚函数的类生成一张表,存储该类所有虚函数的实际地址(派生类覆盖基类虚函数时更新表项)。

② 虚指针(vptr):对象内存首地址存放指向自身类vtable的指针(由构造函数初始化)。

③ 动态绑定:通过基类指针/引用调用虚函数时,通过vptr定位vtable,根据函数偏移量跳转到实际函数执行(非静态绑定)。

c.示例逻辑

class Base { public: virtual void func() { /*...*/ } // 基类虚函数 }; class Derived : public Base { public: void func() override { /*...*/ } // 覆盖基类虚函数 }; int main() { Base* obj = new Derived(); obj->func(); // 运行时调用Derived::func() return 0; }

关键:obj->func()通过obj的vptr找到Derived的vtable,执行第0项(func对应位置)的实际函数。

希望这些内容对大家有所帮助!

感谢大家的三连支持!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/29 22:07:00

SenseVoice Small情感分析省钱技巧:按秒计费精打细算

SenseVoice Small情感分析省钱技巧&#xff1a;按秒计费精打细算 你是不是也遇到过这种情况&#xff1a;手头有一段3分钟的客户录音要分析情绪&#xff0c;想用AI做语音情感识别&#xff0c;结果发现大多数云端GPU服务都是按小时计费&#xff1f;哪怕你只用了5分钟&#xff0c…

作者头像 李华
网站建设 2026/2/14 4:16:59

树莓派课程设计小项目:按钮中断触发机制手把手教学

按下那一刻发生了什么&#xff1f;——用树莓派实现按钮中断的深度实战教学你有没有想过&#xff0c;当你按下开发板上的一个物理按钮时&#xff0c;系统是如何“瞬间”做出反应的&#xff1f;在很多初学者的树莓派课程设计小项目中&#xff0c;最常见的做法是写一个while True…

作者头像 李华
网站建设 2026/2/15 20:42:22

HY-MT1.5-7B部署案例:金融行业术语精准翻译系统

HY-MT1.5-7B部署案例&#xff1a;金融行业术语精准翻译系统 1. 引言 随着全球化进程的不断加快&#xff0c;金融行业的跨国业务日益频繁&#xff0c;对高质量、高精度的多语言翻译需求愈发迫切。传统通用翻译模型在处理专业领域术语时往往存在语义偏差、格式错乱、上下文理解…

作者头像 李华
网站建设 2026/2/14 5:39:35

UI-TARS-desktop开箱即用:快速体验自然语言控制电脑

UI-TARS-desktop开箱即用&#xff1a;快速体验自然语言控制电脑 1. 应用简介与核心能力 UI-TARS-desktop 是一个基于多模态 AI Agent 技术的桌面自动化工具&#xff0c;旨在通过自然语言指令实现对计算机系统的直观控制。该应用集成了视觉语言模型&#xff08;Vision-Languag…

作者头像 李华
网站建设 2026/2/12 17:30:56

ESP32-CAM搭配Arduino实现图片FTP上传项目应用

用一块不到30元的ESP32-CAM&#xff0c;实现自动拍照并上传到FTP服务器 你有没有想过&#xff0c;花一杯奶茶的钱&#xff0c;就能做出一个能拍照、联网、自动上传图片的“微型监控终端”&#xff1f; 这不是科幻&#xff0c;而是今天就能在自家阳台上搭出来的现实项目。 本…

作者头像 李华
网站建设 2026/2/2 4:19:14

如何用gpt-oss-20b-WEBUI打造自动化文档解析系统

如何用gpt-oss-20b-WEBUI打造自动化文档解析系统 1. 引言&#xff1a;本地化大模型驱动的智能文档处理新范式 在企业级信息管理场景中&#xff0c;非结构化文档&#xff08;如PDF、合同、技术白皮书&#xff09;的解析与结构化提取长期依赖人工或规则引擎&#xff0c;效率低且…

作者头像 李华