C++递归实现二叉树的前序遍历、中序遍历和后序遍历
1. 二叉树的实现
struct TreeNode {
TreeNode() : m_val(0), m_left_node(NULL), m_right_node(NULL) { }
TreeNode(int val) : m_val(val), m_left_node(NULL), m_right_node(NULL) { }
TreeNode(int val, TreeNode* left_node, TreeNode* right_node) : m_val(val), m_left_node(left_node), m_right_node(right_node) { }
int m_val;
TreeNode* m_left_node;
TreeNode* m_right_node;
};
2. 递归遍历方法类实现
class Solution {
public:
std::vector<int> Traversal(TreeNode* root) {
std::vector<int> result;
if (root == NULL) return result;
TraversalResult3(root, result);
return result;
}
void TraversalResult1(TreeNode* root, std::vector<int>& result) {
if (root == NULL) return;
result.push_back(root->m_val);
TraversalResult1(root->m_left_node, result);
TraversalResult1(root->m_right_node, result);
}
void TraversalResult2(TreeNode* root, std::vector<int>& result) {
if (root == NULL) return;
TraversalResult2(root->m_left_node, result);
result.push_back(root->m_val);
TraversalResult2(root->m_right_node, result);
}
void TraversalResult3(TreeNode* root, std::vector<int>& result) {
if (root == NULL) return;
TraversalResult3(root->m_left_node, result);
TraversalResult3(root->m_right_node, result);
result.push_back(root->m_val);
}
void FreeSpace(TreeNode* root) {
if (!root) return;
if (root->m_left_node) FreeSpace(root->m_left_node);
if (root->m_right_node) FreeSpace(root->m_right_node);
delete root;
}
};
3. 整体代码
#include <iostream>
#include <vector>
struct TreeNode {
TreeNode() : m_val(0), m_left_node(NULL), m_right_node(NULL) { }
TreeNode(int val) : m_val(val), m_left_node(NULL), m_right_node(NULL) { }
TreeNode(int val, TreeNode* left_node, TreeNode* right_node) : m_val(val), m_left_node(left_node), m_right_node(right_node) { }
int m_val;
TreeNode* m_left_node;
TreeNode* m_right_node;
};
class Solution {
public:
std::vector<int> Traversal(TreeNode* root) {
std::vector<int> result;
if (root == NULL) return result;
TraversalResult3(root, result);
return result;
}
void TraversalResult1(TreeNode* root, std::vector<int>& result) {
if (root == NULL) return;
result.push_back(root->m_val);
TraversalResult1(root->m_left_node, result);
TraversalResult1(root->m_right_node, result);
}
void TraversalResult2(TreeNode* root, std::vector<int>& result) {
if (root == NULL) return;
TraversalResult2(root->m_left_node, result);
result.push_back(root->m_val);
TraversalResult2(root->m_right_node, result);
}
void TraversalResult3(TreeNode* root, std::vector<int>& result) {
if (root == NULL) return;
TraversalResult3(root->m_left_node, result);
TraversalResult3(root->m_right_node, result);
result.push_back(root->m_val);
}
void FreeSpace(TreeNode* root) {
if (!root) return;
if (root->m_left_node) FreeSpace(root->m_left_node);
if (root->m_right_node) FreeSpace(root->m_right_node);
delete root;
}
};
int main() {
TreeNode* root = new TreeNode(5, new TreeNode(6, new TreeNode(8), NULL), new TreeNode(7, NULL, new TreeNode(9)));
Solution solution;
std::vector<int> result = solution.Traversal(root);
for (int i = 0; i < result.size(); ++i) std::cout << result[i] << " ";
std::cout << std::endl;
solution.FreeSpace(root);
return 0;
}