递归算法的三要素:参数和返回值;终止条件;单层递归的逻辑。
1.递归函数的参数和返回值:确定哪些参数是递归过程中需要处理的,就在递归函数里加上这个参数,并要明确递归函数的返回值和返回类型。
2.确定终止条件:如果递归没有终止条件,操作系统的内存栈就会溢出。
3.确定单层递归的逻辑:确定每一层递归需要处理的信息。
前序遍历递归实现:
//前序遍历
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;
}
中序遍历实现:
//中序遍历
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;
}
后序遍历实现:
//后序遍历
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;
}