用一些小的事例来分析我们对于递归和我们使用非递归的一些理解

//找树中是否有值为val的节点
    Node find(Node root,int val){
        if (root==null){
            //总结此作用是可以帮助root为空是,在栈内的元素是要进行出栈的,
            // 此时root将指向栈的栈顶元素
            return null;
        }
        if (root.value==val){
            //1.从根先找
            return root;
        }
        //必须接收返回值不然无法判定是否找到
        Node v=find(root.left, val);
        //2.进行这一步代表根没有找到我们从左子树开始找
        if (v!=null){
            return v;
        }
        Node b=find(root.right, val);
        //2.进行这一步代表根没有找到,左子树也没有找打,我们从右子树开始找
        if (b!=null){
            return b;
        }
        //如果都没有找到我们退出;
        return null;
    }
    //递归求叶子的节点数
    int getLeafSize(Node root){
        if (root==null){
            return 0;
        }
        if (root.left==null&&root.right==null){
            return 1;
        }
        return getLeafSize(root.left)+getLeafSize(root.right);
    }
    //求叶子的节点数
    static  int size=0;
    int getLeafSize6(Node root){
        if (root==null){
            return 0;
        }
        if (root.left==null&&root.right==null){
            size++;
        }
        getLeafSize6(root.left);
        getLeafSize6(root.right);
        return size;
    }
    //求树的节点个数使用递归
   int getSize(Node root){
       if (root==null){
           return 0;
       }
       return getSize(root.left)+getSize(root.right)+1;
   }
    //使用非递归的方法求
    static int size9=0;
    int  getSize5(Node root){
        if (root==null){
            return 0;
        }
        size9++;
        getSize5(root.left);
        getSize5(root.right);
        return size9;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值