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

深圳卓马科技有限公司 2026/09/09 20:48:42

二叉树的遍历

文章目录

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

装饰网站建设娄底网站建设

在当前新能源汽车市场,20万元以内的纯电动 SUV 已经成为很多家庭用户考虑的主流购车预算区间。这一价位车型普遍具备实用续航、较为丰富的主动安全功能以及足够的日常出行空间,

2026/06/30 13:33:07

万州网站建设郑州建设网站

如何在 IAR 中真正激活 STM32 的硬件 FPU?不只是勾个选项那么简单你有没有遇到过这种情况:代码里全是float运算,IAR 项目也“明明”启用了

2026/06/30 13:12:04

无锡网站建设网站建设规划

想象一下,你正在组建一个虚拟团队:有擅长研究的分析师、文笔优美的撰稿人、经验丰富的项目经理。在CrewAI的世界里,这些角色由不同的AI智能体扮演࿰

2026/06/30 11:41:27

南昌网站建设公司上海门户网站建设

用户模式驱动能否扛住高负载32位打印?一次医院PACS系统的实战排坑从一个“打印失败”的告警说起凌晨三点,某三甲医院信息科值班电话响起——放射科医生反馈胶片打印机大面积卡顿

2026/06/30 10:46:21

深圳网站建设公司浙江网站建设

引言:为什么需要 PyUSB?在嵌入式系统、工业自动化、物联网(IoT)以及硬件交互开发中,与 USB 设备通信是一项常见但技术门

2026/06/30 10:49:22

唐山网站建设长沙网站建设

Sendmail:强大邮件程序的配置与管理指南1. Sendmail 简介Sendmail 是一款功能强大但学习和理解难度较大的邮件程序。过去,配置 Sendmail 需要直接编辑复杂的 sendma

2026/06/30 13:01:04

布吉网站建设张家界网站建设

处理不平衡数据集与不同分布数据集的策略在数据分析和机器学习领域,我们常常会遇到不平衡数据集和不同分布数据集的问题。这些问题会对模型的训练和性能评估产生重要影响。下面我们将详细探讨如何应对这些挑战。处理

2026/06/30 12:38:02

网站建设教程网站制作建设

Display Driver Uninstaller终极指南:彻底解决显卡驱动冲突问题【免费下载链接】display-drivers-uninstallerDisplay Driver

2026/06/30 12:02:59