二叉树-递归遍历
深度优先遍历
先往深走,遇到叶子结点再往回走,分为前序遍历,中序遍历和后序遍历。方法有递归法和迭代法。前中后序遍历,指的是中间节点的遍历顺序。
前序遍历:5 4 1 2 6 7 8 中左右
中序遍历:1 4 2 5 7 6 8 左中右
后序遍历:1 2 4 7 8 6 5 左右中
深度优先遍历可利用递归法或者迭代法实现,我们先阐述递归法。
定义二叉树结点
struct TreeNode{ int val; TreeNode* left;//指向左孩子 TreeNode* right;//指向右孩子 TreeNode(int x):val(x),left(NULL),right(NULL){} };
实现递归算法三步:
1、确定需要输入的参数和返回值
2、确定函数的终止条件
3、确定单次递归的逻辑。
前序遍历-递归实现
class Solution{ public: void Traversal(TreeNode* cur, vector<int>& vec){ if(cur == NULL) return; vec.push_back(cur->val);//中 Traversal(cur->left,vec);//左 Traversal(cur->right,vec);//右 } vector<int> preorderTraversal(TreeNode* root){ vector<int> result; Traversal(root,result); return result; } };
中序遍历-递归实现
class Solution{ public: void Traversal(TreeNode* cur, vector<int>& vec){ if(cur == NULL) return; Traversal(cur->left,vec);//左 vec.push_back(cur->val);//中 Traversal(cur->right,vec);//右 } vector<int> preorderTraversal(TreeNode* root){ vector<int> result; Traversal(root,result); return result; } };
后序遍历-递归实现
class Solution{ public: void Traversal(TreeNode* cur, vector<int>& vec){ if(cur == NULL) return; Traversal(cur->left,vec);//左 Traversal(cur->right,vec);//右 vec.push_back(cur->val);//中 } vector<int> preorderTraversal(TreeNode* root){ vector<int> result; Traversal(root,result); return result; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!