二叉树的四种遍历方法中,四种方法都可以使用迭代方法,而前中后序遍历可以使用递归方法。
写递归函数的三大要素:
确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,传入参数
确定终止条件:写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息
确定单层递归的逻辑:确定每一层递归要做的事
例题:
这题要求返回一个中序遍历顺序数组,我们不可能在递归过程中每次都创建一个数组,故我们使用inorder函数来进行递归遍历,在遍历的过程中将元素加入数组
递归函数的参数及返回值:递归函数需要遍历树,并在过程中将结点值添加到数组中,故递归函数的参数是root和vector引用(故不需要返回值,直接对数组进行操作)
终止条件:碰到空结点时(即叶子结点的左子树)
单层递归的逻辑:中序遍历的每一层需要先访问其左子树,再访问父节点,最后访问右子树。
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
inorder(root,res);
return res;
}
void inorder(TreeNode* root,vector<int>& res)
{
if(root == NULL)
return ;
inorder(root->left,res);
res.push_back(root->val);
inorder(root->right,res);
}
};