
先强调一下,本篇博客,对知晓一点二叉树的人会更友好
二叉树的遍历方式,分为深度优先遍历与广度优先遍历
深度优先遍历
前序遍历(递归法,迭代法) – 中 左 右中序遍历(递归法,迭代法) – 左 中 右后序遍历(递归法,迭代法) – 左 右 中广度优先遍历
层次遍历(迭代法)以上描述的是,各种遍历方式
说到递归,想写好,要记清楚几个点
1. 确定参数
2. 明确结束条件
3. 确定单层递归的逻辑(哪些需进行递归)
好了,上代码
class TreeNode { // 先手写一个节点
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
}
// 递归遍历
void Traversal(TreeNode *root, vector<int> &result){// 1.递归传参
// 2.递归结束条件
if(root == nullptr){
return;
}
// 3.单层循环条件 --- 前序遍历 中左右
result.push_back(root->val); // 中
Traversal(root->left,result); //左
Traversal(root->right,result); //右
}
// 一个函数,用于放入一组二叉树,与返回遍历后的数据
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
Traversal(root,result);
return result; // 返回遍历后的数据
}以上为前序遍历
中序遍历与后续遍历 只需要改动以上一段代码的顺序
// 单层循环条件 --- 前序遍历 中左右
result.push_back(root->val); // 中
Traversal(root->left,result); //左
Traversal(root->right,result); //右
// 单层循环条件 --- 中序遍历 左中右
traversal(root->left,result); // 左
result.push_back(root->val); // 中
traversal(root->right,result); // 右
// 单层循环条件 --- 后序遍历 左右中
Traversal(root->left,result); // 左
Traversal(root->right,result);// 右
result.push_back(root->val); // 中
}ok啦,本次分享就到这里哦,希望大家有收获。