题目(leecode T144 T145 T94):
利用递归的方式写出二叉树的前、中、后序遍历
利用递归写出二叉树的遍历时,我们一定要明确几个点,一是确定递归函数的参数和返回值;二是确定终止条件;三是确定单层递归的逻辑。
二叉树的前序遍历是中左右的顺序;中序遍历是左中右的顺序;后序遍历是左右中的顺序
因此我们递归函数的参数和返回值肯定是节点和返回结果的数组,终止条件是当遍历的节点为空,即遍历完时,单层遍历根据不同的遍历方式不同而确定。
题解:
前序遍历
class Solution {
public:
void traversal(TreeNode* cur, vector<int>& vec){
if(cur == NULL) return;;
vec.push_back(cur->val); //中
traversal(cur -> left, vec); //左
traversal(cur -> right, vec); //右
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
traversal(root , result);
return result;
}
};
中序遍历
class Solution {
public:
void traversal(TreeNode* cur, vector<int>& vec){
if(cur == NULL) return;;
traversal(cur -> left, vec); //左
vec.push_back(cur->val); //中
traversal(cur -> right, vec); //右
}
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result;
traversal(root , result);
return result;
}
};
后序遍历
class Solution {
public:
void traversal(TreeNode* cur, vector<int>& vec) {
if (cur == NULL) return;
traversal(cur->left, vec); // 左
traversal(cur->right, vec); // 右
vec.push_back(cur->val); // 中
}
vector<int> postorderTraversal(TreeNode* root) {
vector<int> result;
traversal(root, result);
return result;
}
};