二叉树的递归遍历(必须掌握)
递归三步:
- 确定递归函数的参数和返回值(一般没有返回值)
- 确定终止条件
- 确定单层递归的逻辑
144. 二叉树的前序遍历、
题目链接:
144. 二叉树的前序遍历
94. 二叉树的中序遍历
145. 二叉树的后序遍历
给你二叉树的根节点 root ,返回它节点值的前序遍历、中序遍历、后序遍历。
思路:
这三题递归函数的参数是根节点root和操作的数组result,无返回值;终止条件是遇到空节点NULL;单层递归中的逻辑是:
前序遍历:先放遍历的中节点到数组,再向左遍历左节点,再向右遍历右节点。
中序遍历:先向左遍历左节点,再放遍历的中节点到数组,再向右遍历右节点。
后序遍历:先向左遍历左节点,再向右遍历右节点,再放遍历的中节点到数组。
注意这里在函数中对数组进行操作时,传入的参数一定是数组的引用vecctor< int >&
前序遍历:
class Solution {
public:
void traversal(TreeNode* treenode, vector<int>& result)
{
if (treenode == nullptr)
{
return;
}
result.push_back(treenode->val);
traversal(treenode->left,result);
traversal(treenode->right,result);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
traversal(root,result);
return result;
}
};
中序遍历:
class Solution {
public:
void traversal(TreeNode* cur, vector<int>& result)
{
if (cur==nullptr)
{
return;
}
traversal(cur->left, result);
result.push_back(cur->val);
traversal(cur->right, result);
}
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result;
traversal(root,result);
return result;
}
};
后序遍历:
class Solution {
public:
void traversal(TreeNode* cur, vector<int>& result)
{
if (cur==nullptr)
{
return;
}
traversal(cur->left, result);
traversal(cur->right, result);
result.push_back(cur->val);
}
vector<int> postorderTraversal(TreeNode* root) {
vector<int> result;
traversal(root,result);
return result;
}
};