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

广州酒饮酒类交易中心 2026/09/09 20:15:45

二叉树的遍历

文章目录

  • 二叉树的遍历
    • 深度优先遍历(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;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

滁州网站建设黑龙江网站建设

Sketch制作IndexTTS2品牌视觉元素,统一对外形象识别在开源AI语音合成项目日益增多的今天,一个技术方案能否脱颖而出,早已不再仅仅取决于模型性能。用

2026/06/30 10:31:50

丹阳网站建设长沙市网站建设公司

网络服务与数据交互:比特币汇率、邮件获取与文本翻译在当今数字化时代,网络服务在各个领域都发挥着重要作用。本文将详细介绍如何利用网络服务实现比特币汇率查询、邮件获取以及文本翻译等功能。1. 比特币汇率查

2026/06/30 10:19:49

网站建设维护黑龙江网站建设

目录系统概述技术架构功能模块应用价值项目技术支持论文大纲核心代码部分展示可定制开发之亮点部门介绍结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作系统概述Sp

2026/06/30 12:12:30

珠海网站建设网站建设目标

一、引言:先进工艺下LDO的隐形可靠性危机随着消费电子、物联网设备对能效比要求的持续提升,电源管理集成电路(PMIC)正加速向28nm及以下HK

2026/06/30 14:14:10

南充网站建设富阳网站建设

人脸视频保存 -minio对象存储现在基本都是对接着网安那边.我们只需要负责身份证识别这一块 然后根据接口来判断是否成功。 详情可见认证文章身份证认证身份证+手机号码身份证+手机号码&

2026/06/30 10:18:49

苏州网站建设房产网站建设

终极剪贴板管理指南:如何3倍提升你的复制粘贴效率【免费下载链接】MaccyLightweight clipboard manager for macOS项目地址: https://git

2026/06/30 13:40:06

网站建设报价网站建设公司哪个好

铜钟音乐平台终极使用指南:免费纯净听歌完整教程【免费下载链接】tonzhon-music铜钟 (Tonzhon.com): 免费听歌; 没有直播, 社交, 广告, 干扰; 简洁纯粹, 资

2026/06/30 13:47:37

怎样建设网站北京网站建设报价

SmallJava语言的类型检查与作用域机制详解1. 类型检查基础在编程中,确保表达式的类型与使用它的上下文所期望的类型一致至关重要。比如在条件语句中,表达式的类型应该是布尔型。为了实现类型检查,我们

2026/06/30 12:50:33

唐山网站建设网站建设技术

如何在5分钟内彻底解决macOS上res-downloader的配置难题【免费下载链接】res-downloader资源下载器、网络资源嗅探,支持微信视频号下载、网页抖音无水印下载、网页

2026/06/30 10:17:19

山西网站建设北海网站建设

2025年全新视角:Tailwind CSS深度应用与效率革命【免费下载链接】awesome-tailwindcss😎 Awesome things related to

2026/06/30 13:09:34