ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

二叉树の递归遍历

2026/10/7 8:11:00 拓冰建站 浏览量
二叉树の递归遍历 学习一下卡哥的递归思路原帖二叉树的递归遍历 | 递归 | 二叉树遍历 | 代码随想录-全网最全算法数据结构刷题学习路线|图文视频教程|免费开源每次写递归都按照这三要素来写确定递归函数的参数和返回值确定哪些参数是递归的过程中需要处理的那么就在递归函数里加上这个参数 并且还要明 确每次递归的返回值是什么进而确定递归函数的返回类型。确定终止条件写完了递归算法, 运行的时候经常会遇到栈溢出的错误就是没写终止条件或者终止条件写 的不对操作系统也是用一个栈的结构来保存每一层递归的信息如果递归没有终止操作 系统的内存栈必然就会溢出。确定单层递归的逻辑确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。以前序遍历为列子1、确定递归函数的参数和返回值应该是传入一个节点然后把节点的值存入一个容器所以我们有两个输入没有2、确定终止条件就是遍历到空的节点了就终止3、确定单层递归的逻辑对于前序遍历保证中左右的顺序显示中间的值存入然后去到左子树左子树处理 完后去到右子树。class Solution { public: void traversal(TreeNode* cur, vectorint vec) { if (cur NULL) return; vec.push_back(cur-val); // 中 traversal(cur-left, vec); // 左 traversal(cur-right, vec); // 右 } vectorint preorderTraversal(TreeNode* root) { vectorint result; traversal(root, result); return result; } };以此类推可得中序和后序void traversal(TreeNode* cur, vectorint vec) { if (cur NULL) return; traversal(cur-left, vec); // 左 vec.push_back(cur-val); // 中 traversal(cur-right, vec); // 右 }void traversal(TreeNode* cur, vectorint vec) { if (cur NULL) return; traversal(cur-left, vec); // 左 traversal(cur-right, vec); // 右 vec.push_back(cur-val); // 中 }熟悉上述递归操作后就可以完成LeetCode.144/145/94 前后中序的题目。