C++链表实现二叉树深度优先遍历(前序遍历,中序遍历,后序遍历)
递归实现二叉树深度优先遍历:
- 确定函数参数列表和返回值;
- 确定递归终止条件;
- 确定实现逻辑。
二叉树结构体定义:
struct 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) {}
};
二叉树的前序遍历:
class Solution { //二叉树的前序遍历
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
_preorderTraversal(root, result);
return result;
}
private:
void _preorderTraversal(TreeNode* cur, vector<int>& result) {
if (cur == nullptr) return;
result.push_back(cur->val);
_preorderTraversal(cur->left, result);
_preorderTraversal(cur->right, result);
}
};
二叉树的中序遍历:
class Solution { //二叉树的中序遍历
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result;
_inorderTraversal(root, result);
return result;
}
private:
void _inorderTraversal(TreeNode* cur, vector<int>& result) {
if (cur == nullptr) return;
_inorderTraversal(cur->left, result);
result.push_back(cur->val);
_inorderTraversal(cur->right, result);
}
};
二叉树的后序遍历:
class Solution { //二叉树的后序遍历
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> result;
_postorderTraversal(root, result);
return result;
}
private:
void _postorderTraversal(TreeNode* cur, vector<int>& result) {
if (cur == nullptr) return;
_postorderTraversal(cur->left, result);
_postorderTraversal(cur->right, result);
result.push_back(cur->val);
}
};
参考资料:代码随想录