(66,67 , 68)LintCode 之 二叉树遍历递归实现

在这几道二叉树遍历的题目中,应注意的是:对于有返回值的调用函数来说,存储返回值的vector变量不能在每次函数调用时都被重新初始化所以我在这里定义了一个位于函数外的成员变量用来存储返回值。

66.题目描述:给出一棵二叉树,返回其节点值的前序遍历。

二叉树的前序遍历:根节点——>左子树——>右子树,使用递归实现,先处理中间结点,然后左子树,右子树。C++代码如下:

class Solution {
public:
    /**
     * @param root: A Tree
     * @return: Preorder in ArrayList which contains node values.
     */
     vector <int> preorder;//注意,定义的变量不能在每次调用时被重新定义。
    vector<int> preorderTraversal(TreeNode * root) {
        // write your code here
        if(root==NULL){  //如果是空子树的话,直接返回。
            return preorder;
        }
        preorder.push_back(root->val);
        if(root->left!=NULL){
            preorderTraversal(root->left);
        }
        if(root->right!=NULL){
            preorderTraversal(root->right);
        }
        return preorder;
    }
};

67.题目描述:给出一棵二叉树,返回其中序遍历

二叉树的中序遍历:左子树——>根节点——>右子树。使用递归实现,先处理左子树,然后是根节点,最后右子树。用C++实现:

class Solution {
public:
    /**
     * @param root: A Tree
     * @return: Inorder in ArrayList which contains node values.
     */
    vector<int> inorder;
    vector<int> inorderTraversal(TreeNode * root) {
        // write your code here
        if(root==NULL){
            return inorder;
        }
        inorderTraversal(root->left);
        inorder.push_back(root->val);
        inorderTraversal(root->right);
        return inorder;
    }
};

68. 题目描述:给出一棵二叉树,返回其节点值的后序遍历。

二叉树后序遍历:左子树——>右子树——>根节点。使用递归算法,先处理左子树,然后右子树,最后根节点。用C++实现:

class Solution {
public:
    /**
     * @param root: A Tree
     * @return: Postorder in ArrayList which contains node values.
     */
    vector<int> postorder;
    vector<int> postorderTraversal(TreeNode * root) {
        // write your code here
        if(root==NULL){
            return postorder;
        }
        postorderTraversal(root->left);
        postorderTraversal(root->right);
        postorder.push_back(root->val);
        return postorder;
        
    }
};

分割线—————————————————————————————————————————————————

递归是一个比较难理解的思想。

①递归的定义是:“一个算法,这个算法调用自己来完成它的部分工作”。递归算法要想成功,必须在比原始问题规模更小的问题上调用自己。

②递归由两个部分组成:初始情况(base case)+递归部分。其中初始情况只处理可以直接解决而不需要再次递归调用的简单输入。对于二叉树的遍历,它的初始情况就是对根节点的访问,而递归部分是对左右子树的访问。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值