一.前中后序遍历
1.前中后序遍历概念
前中后序遍历其实就是按照子节点与父节点的遍历顺序为依据。
前序:中左右
中序:左中右
后序:左右中
技巧:中在前面就是前序遍历,中在中间就是中序,在后就是后序
这里中代表父节点,左代表左节点(左孩子),右代表右节点(右孩子)
以下是对应三种遍历方式的顺序:
前序:10->9->6->5->7->4->3
中序:6->9->5->10->4->7->3
后序:6->5->9->4->3->7->10
2.代码实现
前序:
class Solution {
public:
void traversal(TreeNode* cur, vector<int>& nums) {
if (cur == NULL) return;
nums.push_back(cur->val); //将父节点放进去即(中)
traversal(cur->left, nums); //放(左)
traversal(cur->right, nums); //放(右)
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
traversal(root, result);
return result;
}
};
中序:
class Solution {
public:
void traversal(TreeNode* cur, vector<int>& nums) {
if (cur == NULL) return;
traversal(cur->left, nums); //放(左)
nums.push_back(cur->val); //将父节点放进去即(中)
traversal(cur->right, nums); //放(右)
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
traversal(root, result);
return result;
}
};
后序:
class Solution {
public:
void traversal(TreeNode* cur, vector<int>& nums) {
if (cur == NULL) return;
traversal(cur->left, nums); //放(左)
traversal(cur->right, nums); //放(右)
nums.push_back(cur->val); //将父节点放进去即(中)
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
traversal(root, result);
return result;
}
};