网站建设哪家公司好湘潭网站建设

广州谷丰海之珠网络教育发展有限公司 2026/09/09 19:31:37

二叉树的遍历

文章目录

  • 二叉树的遍历
    • 深度优先遍历(DFS)
      • 二叉树的前序遍历
      • 二叉树的中序遍历
      • 二叉树的后序遍历
    • 广度优先遍历(BFS)
      • 层序遍历

二叉树是数据结构中的核心概念,遍历二叉树是理解其结构和操作的基础

深度优先遍历(DFS)

二叉树的前序遍历

顺序:根节点 → 左子树 → 右子树(简记为 “根左右”)

ABCDE二叉树的先序遍历序列为:ABDEC

  • 递归实现
// 递归实现class Solution{public:vector<int>preorderTraversal(TreeNode*root){vector<int>result;preorderHelper(root,result);returnresult;}private:voidpreorderHelper(TreeNode*node,vector<int>&result){if(!node){return;}result.push_back(node->val);// 访问根节点preorderHelper(node->left,result);// 遍历左子树preorderHelper(node->right,result);// 遍历右子树}};
  • 迭代实现(使用栈)
// 迭代实现(使用栈)vector<int>preorderTraversalIterative(TreeNode*root){vector<int>result;if(!root){returnresult;}stack<TreeNode*>stk;stk.push(root);while(!stk.empty()){TreeNode*node=stk.top();stk.pop();result.push_back(node->val);// 右子节点先入栈,左子节点后入栈// 保证左子节点先被访问if(node->right){stk.push(node->right);}if(node->left){stk.push(node->left);}}returnresult;}
  • 迭代实现(另一种方式)
// 迭代实现(另一种方式)vector<int>preorderTraversalIterative2(TreeNode*root){vector<int>result;stack<TreeNode*>stk;TreeNode*curr=root;while(curr||!stk.empty()){// 遍历到最左侧节点while(curr){result.push_back(curr->val);// 访问当前节点stk.push(curr);curr=curr->left;}// 回溯并转向右子树curr=stk.top();stk.pop();curr=curr->right;}returnresult;}

二叉树的中序遍历

顺序:左子树 → 根节点 → 右子树(简记为 “左根右”)

ABCDE二叉树的中序遍历序列为:DBEAC

  • 递归
// 递归实现class Solution{public:vector<int>inorderTraversal(TreeNode*root){vector<int>result;inorderHelper(root,result);returnresult;}private:voidinorderHelper(TreeNode*node,vector<int>&result){if(!node)return;inorderHelper(node->left,result);// 遍历左子树result.push_back(node->val);// 访问根节点inorderHelper(node->right,result);// 遍历右子树}};
  • 迭代实现
// 迭代实现vector<int>inorderTraversalIterative(TreeNode*root){vector<int>result;stack<TreeNode*>stk;TreeNode*curr=root;while(curr||!stk.empty()){// 遍历到最左侧节点while(curr){stk.push(curr);curr=curr->left;}// 访问节点并转向右子树curr=stk.top();stk.pop();result.push_back(curr->val);curr=curr->right;}returnresult;}
  • 迭代实现
vector<int>inorderTraversalUnified(TreeNode*root){vector<int>result;stack<TreeNode*>stk;if(root)stk.push(root);while(!stk.empty()){TreeNode*node=stk.top();stk.pop();if(node){// 右中左的顺序入栈if(node->right)stk.push(node->right);// 右stk.push(node);// 中stk.push(nullptr);// 标记节点if(node->left)stk.push(node->left);// 左}else{// 遇到标记,访问节点node=stk.top();stk.pop();result.push_back(node->val);}}returnresult;}

二叉树的后序遍历

顺序:左子树 → 右子树 → 根节点(简记为 “左右根”)

ABCDE二叉树的后序遍历序列为:DEBCA

  • 递归
// 递归实现class Solution{public:vector<int>postorderTraversal(TreeNode*root){vector<int>result;postorderHelper(root,result);returnresult;}private:voidpostorderHelper(TreeNode*node,vector<int>&result){if(!node)return;postorderHelper(node->left,result);// 遍历左子树postorderHelper(node->right,result);// 遍历右子树result.push_back(node->val);// 访问根节点}};
  • 迭代实现(双栈法)
// 迭代实现(双栈法)vector<int>postorderTraversalTwoStacks(TreeNode*root){vector<int>result;if(!root)returnresult;stack<TreeNode*>stk1,stk2;stk1.push(root);while(!stk1.empty()){TreeNode*node=stk1.top();stk1.pop();stk2.push(node);if(node->left)stk1.push(node->left);if(node->right)stk1.push(node->right);}while(!stk2.empty()){result.push_back(stk2.top()->val);stk2.pop();}returnresult;}
  • 迭代实现
// 迭代实现vector<int>postorderTraversalUnified(TreeNode*root){vector<int>result;stack<TreeNode*>stk;if(root)stk.push(root);while(!stk.empty()){TreeNode*node=stk.top();stk.pop();if(node){// 中右左的顺序入栈stk.push(node);// 中stk.push(nullptr);// 标记节点if(node->right)stk.push(node->right);// 右if(node->left)stk.push(node->left);// 左}else{// 遇到标记,访问节点node=stk.top();stk.pop();result.push_back(node->val);}}returnresult;}

广度优先遍历(BFS)

层序遍历

顺序:从上到下,从左到右逐层遍历

// 基本层序遍历(返回一维数组)vector<int>levelOrder(TreeNode*root){vector<int>result;if(!root)returnresult;queue<TreeNode*>q;q.push(root);while(!q.empty()){TreeNode*node=q.front();q.pop();result.push_back(node->val);if(node->left)q.push(node->left);if(node->right)q.push(node->right);}returnresult;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

海口网站建设三亚网站建设

甲骨文金文识别可能性探讨:HunyuanOCR能否延伸至古文字?在数字人文与人工智能交汇的今天,一个看似遥远的问题正变得越来越现实:我们能否让A

2026/06/30 13:30:36

上海营销型网站建设郴州网站建设

第一章:Open-AutoGLM弹窗识别速度提升在自动化测试与智能运维场景中,弹窗识别的响应速度直接影响系统整体效率。Open-AutoGLM 通过优化视觉模型推理流程和引

2026/06/30 13:24:35

无锡网站建设诸城网站建设

iOS免越狱系统定制终极指南:快速上手Cowabunga Lite【免费下载链接】CowabungaLiteiOS 15+ Customization Toolbox项目地址:

2026/06/30 10:00:48

上海网站建设东莞手机网站建设

如何选择地址识别工具?MGeo开源优势全面剖析在地理信息处理、物流调度、城市计算等场景中,地址相似度匹配与实体对齐是构建高质量空间数据链路的核心环节。尤其是在中文地址语境下

2026/06/30 09:47:17

长沙网站建设公司网站建设什么

高效微调大语言模型:lora-scripts在医疗问答中的应用实践在医疗AI系统开发中,一个普遍而棘手的问题是——通用大模型“懂语法但不懂医学”。当患者问出“舌红少苔、五心

2026/06/30 13:18:05

建设部网站泸州网站建设

在金融开户、远程办公、智慧政务、酒店入住、网约车司机审核等场景中,“你是你”始终是业务合规与风险防控的第一道门槛。如何高效、准确、安全地验证“人”与“证”是否一致?人证合一

2026/06/30 12:00:28

深圳营销型网站建设广东网站建设

什么是数据同步?想想这样一个场景:今天10点开放考试成绩查询的入口,那么在10点钟会有一大波流量高峰,一台服务器肯定扛不住了。而且这种情况几乎没

2026/06/30 13:57:08

网站建设流程四川网站建设

ST7789V驱动调试实战:从白屏到稳定显示的完整路径你有没有遇到过这种情况?硬件接线反复检查无误,MCU也正常运行,可屏幕就是不亮——要么一片

2026/06/30 13:18:35

网站建设与管理烟台网站建设

引言在数字货币市场日均交易量突破2000亿美元的当下,传统交易方式正面临前所未有的挑战。当比特币价格在24小时内经历30%的剧烈波动时,人类交易员的生理极限与情绪干扰成为盈

2026/06/30 10:36:21

南宁网站建设旅游网站建设

第一章 实验设计背景与核心意义随着计算机外设技术的发展,无线鼠标因摆脱线缆束缚、使用灵活的特点,成为主流输入设备。传统无线鼠标多基于专用芯片设计,而基于51单

2026/06/30 10:25:20