二叉树的存储方式可以使线性数组,也可以是链表(与链表定义相似,只不过有左右两个节点指针)
写递归的三要素:
1)确定递归的参数和返回值
2)确定终止条件:写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。
3)确定单层递归的逻辑
所谓前序遍历也就是 根-左-右 的遍历方式。
代码如下:
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;
}
};
查缺补漏:
注意递归停止条件要放在递归语句之前,否则递归不会停止,直到出现访问空指针的错误。