news 2026/5/1 4:02:05

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/4/28 6:54:19

PDF-Extract-Kit避坑指南:云端GPU解决环境配置难题

PDF-Extract-Kit避坑指南&#xff1a;云端GPU解决环境配置难题 你是不是也遇到过这种情况&#xff1f;想用一个开源工具从PDF里提取内容&#xff0c;结果刚打开GitHub项目页面就看到一长串依赖列表&#xff1a;PyTorch、Detectron2、PaddleOCR、Latex-OCR、TorchVision……光是…

作者头像 李华
网站建设 2026/4/28 12:35:02

戴德梁行调研显示,超半数受访者预计2028年及以后不动产交易市场才会迎来复苏 | 美通社头条

、投资者最关注的资产类别(数据来源&#xff1a;戴德梁行)美通社消息&#xff1a;房地产服务和咨询顾问公司戴德梁行发布第六期《中国REITs指数之不动产资本化率调研报告》。戴德梁行联合中联基金、瑞思不动产金融研究院发布2025年度不动产资本化率调研成果&#xff0c;通过精准…

作者头像 李华
网站建设 2026/4/25 20:31:00

FSMN-VAD自动命名语音片段:按顺序导出为独立文件

FSMN-VAD自动命名语音片段&#xff1a;按顺序导出为独立文件 1. 引言 1.1 场景背景与技术需求 在语音识别、音频内容分析和智能语音交互系统中&#xff0c;原始录音通常包含大量非语音的静音或噪声段。这些无效部分不仅增加了后续处理的计算负担&#xff0c;还可能影响模型的…

作者头像 李华
网站建设 2026/4/2 9:11:34

寓教于乐:arduino循迹小车趣味教学活动设计

让小车自己走&#xff1a;一场从“玩”开始的工程启蒙课你有没有见过这样的场景&#xff1f;几个小学生围在一张KT板前&#xff0c;眼睛紧盯着一辆小小的四轮车——它没有遥控器&#xff0c;也不靠人推&#xff0c;却能沿着黑色胶带画出的弯弯曲曲路线稳稳前行。每当它成功拐过…

作者头像 李华
网站建设 2026/4/25 3:59:31

快速构建文本向量化系统|GTE中文Embedding镜像深度体验

快速构建文本向量化系统&#xff5c;GTE中文Embedding镜像深度体验 1. 背景与需求&#xff1a;为什么需要轻量级中文文本向量化方案&#xff1f; 在当前自然语言处理&#xff08;NLP&#xff09;工程实践中&#xff0c;文本向量化已成为信息检索、语义搜索、问答系统、推荐引…

作者头像 李华
网站建设 2026/4/28 15:24:29

AutoGen Studio部署案例:智能教育辅导系统开发

AutoGen Studio部署案例&#xff1a;智能教育辅导系统开发 AutoGen Studio是一个低代码界面&#xff0c;旨在帮助您快速构建AI代理、通过工具增强它们、将它们组合成团队并与之交互以完成任务。它基于AutoGen AgentChat构建——一个用于构建多代理应用的高级API。本文将围绕如…

作者头像 李华