加强网站信息建设网站开发学生鉴定表

张小明 2025/12/28 11:24:25
加强网站信息建设,网站开发学生鉴定表,网站域名包括,相册网站怎么做目录 二叉树遍历分为两大类#xff1a; 二叉树节点结构 深度优先遍历#xff08;DFS#xff09; 二叉树前序递归遍历 二叉树前序非递归遍历 二叉树中序递归遍历 二叉树中序非递归遍历 二叉树后序递归遍历 二叉树后序非递归遍历 广度优先遍历#xff08;BFS#…目录二叉树遍历分为两大类二叉树节点结构深度优先遍历DFS二叉树前序递归遍历二叉树前序非递归遍历二叉树中序递归遍历二叉树中序非递归遍历二叉树后序递归遍历二叉树后序非递归遍历广度优先遍历BFS二叉树的层序遍历二叉树遍历分为两大类深度优先遍历DFS前序、中序、后序广度优先遍历BFS层次遍历掌握二叉树的遍历是理解和操作二叉树的基础。递归方法简洁易懂迭代方法效率更高且避免栈溢出二叉树节点结构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) {} };深度优先遍历DFS二叉树前序递归遍历vectorint preorderTraversal(TreeNode* root) { vectorint result; preorder(root, result); return result; } void preorder(TreeNode* root, vectorint result) { if (!root) return; result.push_back(root-val); // 访问根 preorder(root-left, result); // 遍历左子树 preorder(root-right, result); // 遍历右子树 }二叉树前序非递归遍历思路前序非递归遍历需要借助栈1. 如果树为空直接返回2. 如果树非空从根节点位置开始遍历因为前序遍历规则根节点、左子树、右子树a. 沿着根节点一直往左走将所经过路径中的节点依次入栈并访问。b. 取栈顶元素该元素取到后其左子树要么为空要么已经遍历可以直接遍历该节点对于该节点其左子树已经遍历该节点也已经遍历剩余其右子树没有遍历将其左子树当成一棵新的树开始遍历继续a代码实现class Solution { public: vectorint preorderTraversal(TreeNode* root) { vectorint v; stackTreeNode* st; TreeNode* cur root; while(!st.empty() || cur) { // 每次循环表示要开始访问一颗树了先将一颗数的左路节点都入栈并访问节点 // 剩余左路节点的右子树还没访问 while(cur) { v.push_back(cur-val); st.push(cur); cur cur-left; } // 取栈中的节点依次访问左路节点的右子树 TreeNode* top st.top(); st.pop(); cur top-right; } return v; } };二叉树中序递归遍历vectorint inorderTraversal(TreeNode* root) { vectorint result; inorder(root, result); return result; } void inorder(TreeNode* root, vectorint result) { if (!root) return; inorder(root-left, result); // 遍历左子树 result.push_back(root-val); // 访问根 inorder(root-right, result); // 遍历右子树 }二叉树中序非递归遍历思路中序非递归遍历需要借助栈 1. 空树直接返回 2. 如果树非空从根节点位置开始遍历但此时根节点不能遍历因为中序遍历规则左子树、根节点、右子树 a. 沿着根节点一直往左走将所经过路径中的节点依次入栈 b. 取栈顶元素该元素取到后其左子树要么为空要么已经遍历可以直接遍历该节点对于该节点其左子树已经遍历该节点也已经遍历剩余其右子树没有遍历将其左子树当成一棵新的树开始遍历继续a代码实现class Solution { public: vectorint inorderTraversal(TreeNode* root) { // 空树直接返回 vectorint vRet; if(nullptr root) return vRet; TreeNode* pCur root; stackTreeNode* s; while(pCur || !s.empty()) { // 找以pCur为根的二叉树最左侧的节点并将所经路径中的节点入栈 while(pCur) { s.push(pCur); pCur pCur-left; } pCur s.top(); // pCur左子树为空相当于左子树已经访问过了可以直接访问以pCur为根的二叉树的根节点 vRet.push_back(pCur-val); s.pop(); // 以pCur为根的二叉树的左子树已经遍历完根节点已经遍历 // 将pCur的右子树当成一棵二叉树来遍历 pCur pCur-right; } return vRet; } };二叉树后序递归遍历vectorint postorderTraversal(TreeNode* root) { vectorint result; postorder(root, result); return result; } void postorder(TreeNode* root, vectorint result) { if (!root) return; postorder(root-left, result); // 遍历左子树 postorder(root-right, result); // 遍历右子树 result.push_back(root-val); // 访问根 }二叉树后序非递归遍历思路后序非递归遍历需要借助栈 1. 空树直接返回 2. 如果树非空从根节点位置开始遍历但此时根节点不能遍历因为后序遍历规则左子树、右子树、根节点 a. 沿着根节点一直往左走将所经过路径中的节点依次入栈 b. 取栈顶元素该元素取到后其左子树要么为空要么已经遍历但是此时该节点不能遍历除非其右子树不存在或者其右子树已经遍历才可以遍历该节点.如果该节点右子树没有遍历将其右子树作为一棵新的二叉树遍历继续a代码实现class Solution { public: vectorint postorderTraversal(TreeNode* root) { // 空树直接返回 vectorint vRet; if(nullptr root) return vRet; TreeNode* pCur root; TreeNode* pPrev nullptr; stackTreeNode* s; while(pCur || !s.empty()) { // 找以pCur为根的二叉树最左侧的节点并将所经路径中的节点入栈 while(pCur) { s.push(pCur); pCur pCur-left; } TreeNode* pTop s.top(); // pTop左子树已经访问 // 如果pTop的右子树是空或者右子树已经访问过了就可以访问pTop if(nullptr pTop-right || pPrev pTop-right) { vRet.push_back(pTop-val); s.pop(); // 将刚刚访问过的节点标记起来 pPrev pTop; } else { // 如果右子树没有访问将右子树当成一棵新的二叉树访问 pCur pTop-right; } } return vRet; } };广度优先遍历BFS二叉树的层序遍历层序遍历从上到下从左到右逐层访问二叉树的所有节点。通过这个性质我们可以联想到队列的FIFO特性保证了节点按入队顺序访问先入队的节点先访问符合层序要求vectorvectorint levelOrder(TreeNode* root) { vectorvectorint result; if (!root) return result; queueTreeNode* q; q.push(root); while (!q.empty()) { int levelSize q.size(); vectorint level; for (int i 0; i levelSize; i) { TreeNode* node q.front(); q.pop(); level.push_back(node-val); if (node-left) q.push(node-left); if (node-right) q.push(node-right); } result.push_back(level); } return result; }
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

扬中网站建设如何好听好记的域名

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个交互式学习教程网页,包含:1) 用餐厅点餐的比喻解释异步概念;2) 可运行的代码示例展示callback->Promise->await的演进&#xff1b…

张小明 2025/12/25 18:00:39 网站建设

交易类网站做支付宝功能珠海app开发公司

第一章:Open-AutoGLM导出异常的紧急响应在大规模语言模型部署过程中,Open-AutoGLM作为核心推理引擎,其导出流程偶发异常可能直接影响线上服务稳定性。当检测到导出失败或输出内容异常时,需立即启动应急响应机制,确保故…

张小明 2025/12/25 18:00:41 网站建设

通州富阳网站建设wordpress在线表格

网络安全 3 大热门岗位技能图谱:渗透测试 / 安全运维 / 应用安全,附学习路径 很多想入行网络安全的人,都会陷入 “盲目学技能” 的误区 —— 要么跟着视频学了一堆工具,却不知道对应什么岗位;要么想做渗透测试&#xf…

张小明 2025/12/25 18:00:42 网站建设

可以将自己做的衣服展示的网站企业网站有哪些优点

在当今数字化金融时代,掌握专业的金融技术分析工具对于量化交易者和数据分析师至关重要。FinTA(Financial Technical Analysis)作为基于Pandas的金融技术指标计算库,为你提供了超过80种常见技术指标的高效实现,让Pytho…

张小明 2025/12/25 18:00:45 网站建设

福州网站建设推广服务p2p网上贷款网站建设方案.docx

LobeChat支持哪些大模型?主流LLM接入方式汇总(含C#调用示例) 在构建智能对话系统时,开发者常常面临一个现实问题:如何在一个统一界面上灵活切换不同来源的大语言模型(LLM),而不必为每…

张小明 2025/12/25 18:00:46 网站建设

学会网站开发有什么好处基础微网站开发可信赖

第一章:Open-AutoGLM制胜关键的底层逻辑Open-AutoGLM 的核心竞争力源于其对多模态语义空间的高效对齐机制与动态推理路径优化策略。该模型通过构建统一的图结构化记忆网络,将自然语言指令、代码逻辑与执行状态进行联合嵌入,从而实现跨任务的知…

张小明 2025/12/25 18:04:56 网站建设