算法通关存第七关 | 递归实现前中后序遍历

1.递归的四个步骤

第一步:从小到大递推,

第二步:分情况讨论,明确结束条件,

第三步:组合出完整的方法,

第四步:想法验证,则从小到大画图推演,

第一步:从小到大递推,分情况讨论

 

//20为根节点,则此时前序访问顺序是
    void visit1(){
       list.add(root);//20被访问
       root.left;//继续访问15
       root.right;//继续访问7
    }
//然后向上看node(3)的情况,
    void visit2(){
       list.add(root);//3被访问
       root.left;//继续访问,得到9
       root.right;//继续访问,得到20
    }

//将其合并
    void visit(){
    list.add(root);
    visit(root.right);
    visit(root.left);
}

第二步:分情况讨论,明确结束条件

根据二叉树我们可以看出,没有左右子节点的时候停止也就是进入递归的当前访问元素为null时候,结束

第三步:组合出完整方法

将方法名用preorder表示,单词是前序的意思

    public void preorder(TreeNode root, List<Integer> res){
        if (root == null){
            return;
        }
        res.add(root.val);
        preorder(root.left,res);
        preorder(root.right,res);
    }

第四步:从大到小画图推演

画图是解题最好的方法,一道题一张图

 进入递归,当root=null的时候递归结束,

直接看中序和后序代码,

    //中序
    public static void inOrderRecur(TreeNode root){
        if (root == null){
            return;
        }
        inOrderRecur(root.left);
        System.out.println(root.val + " ");
        inOrderRecur(root.right);
    }
    
    //后序
    public static void postOrderRecur(TreeNode root){
        if (root == null){
            return;
        }
        inOrderRecur(root.left);
        inOrderRecur(root.right);
        System.out.println(root.val + " ");
    }

LeetCode144中的题需要创建一个集合再传入方法,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值