java 找到一节点的所有子节点是不是得递归实现

java 找到一节点的所有子节点是不是得递归实现,第1张

2L谁说必须用递归的,只是递归写起来简单罢了,迭代的方法一样OK;

深度优先或者广度优先都可以

LZ的问题用迭代的方法可以这样解决:

1。把当前节点(需要查找字节点的节点)压入一个堆栈,这步是初始化;

2。从堆栈中d出一个节点,如果该节点是叶子节点,则这条路已经走不通了,如果是非叶子节点,那就把这个节点的所有子节点压入堆栈

3。重复第二步直到堆栈为空

上面三步就能遍历当前节点的所有字节点

递归的话:

f(node){

for(遍历node的所有子节点){

child=当前子节点

if(child为叶子节点){

return

;}

else{

f(child)

}

}

}

#include "stdioh"

main()

{int i,sum=0;

for(i=1;i<=100;i++)

sum=sum+i;

printf("%d",sum);

}

这个是简单的求1~100的和的小程序,如果你需要N为更大的数那么把程序中的100换成你需要的数就可以,希望能帮你的忙!

#include<stdioh>

int main()

{

    void scan(int a,int n);//

    void move(int a,int n,int m);

    void pt(int p,int n);

    int n,m;

    printf("输入n,m:");

    scanf("%d,%d",&n,&m);

    int a[20];

    scan(a,n);

    move(a,n,m);

    pt(a,n);//

    return 0;

}

void scan(int a,int n)

{

    int i;

    for(i=0;i<n;i++)

        scanf("%d",&a[i]);

}

void move(int a,int n,int m)//

{

    int i,j;

    int p;

    p=a[n-1];//

    for(i=1;i<n;i++)

    {

        j=i+1;

        a[n-i]=a[n-j];

        m--;

    }

    a[0]=p;

    if(m>0)

        move(a,n,m);

}

void pt(int p,int n)

{

    int i;

    for(i=0;i<n;i++)//

        printf("%d ",(p+i));

    printf("\n");

}

错误确实比较多,关键的地方做了//标记

经测试,已经可以正常运行

微信小程序推送服务通知需要收集足够的formid,使用过程中发现如果formid大量失效,在使用递归从redis从获取可用formid的时候会导致栈溢出问题,下面方法是使用php的高阶函数来消除递归,完美解决问题,记录之:

<php

class A

{

public static function factorial($n, $accumulator = 1) {

if ($n == 0) {

return $accumulator;

}

return function() use($n, $accumulator) {

return self::factorial($n - 1, $accumulator $n);

};

}

public static function trampoline($params) {

$result = call_user_func_array('self::factorial', $params);

while (is_callable($result)) {

$result = $result();

}

return $result;

}

public static function run()

{

var_dump(self::trampoline(array(500)));

}

}

A::run();

我和同学也讨论过这个问题,也问过老师。我们可以从这个角度考虑下,循环和递归在执行的时候都是用栈 *** 作的,那么很显然循环是可以写成递归的,同样递归也是可以写成循环的。循环写成递归,基本思路嵌套递归,不过我递归学的不是很好,嵌套递归又很复杂所以我只写过两重的,而且很简单,具体原型可以参考数据结构里树的遍历。而递归转化为循环我没有研究过,有一次问老师,老师说:递归理论上是可以用循环做的,不过很麻烦。最终我放弃了尝试递归和循环的转换。用我们老师的话说:不同的数据结构的组织形式和实现方式都不一样,所实现的功能也不一样,没有必要去做那个转换,关键是搞明白他的执行过程最终能使用就可以了。

这次项目中做了一个上传,要求是大于2MB的就压缩成2MB一下的再上传,我这边利用了uniapp的文件接口,使用canvas做了一个压缩上传的功能,目前已上线,使用无问题。

定义canvas

canvas样式

定义数据

打开相册

递归上传

删除照片

预览大图

压缩

如果看了觉得有帮助的,我是@ 鹏多多11997110103 ,欢迎 点赞 关注 评论;

END

往期文章

个人主页

最近在做微信小程序的时候,需要实现在搜索框的输入内容的时候实现全局匹配实现高亮效果,目前的思路是,递归后台来返回的数据,并将对象的value值替换为需要的dom节点,并且通过rich-text来实现,高亮效果。

在实现的过程中主要考虑,不同类型的数据结构,过滤掉特殊符号,url这些基本需求;同时在实现的过程中每次都要去处理最原始的数据,这就需要考虑到对象的深拷贝问题,目前所采用的方法是通过JSONparse(JSONstringify(str))来处理,因为在这个全局搜索的项目中不太会用到函数这些对象。最后通过replace方法来处理这些目标字符串。

wxml:

js:

微信小程序每次只能上传一张。

对于上传多张时需要一张张的上传。

多张上传的原理其实就是用递归的方法,在每一张上传完之后再继续上传下一张,直到完成为止。

以上就是关于java 找到一节点的所有子节点 是不是得递归实现全部的内容,包括:java 找到一节点的所有子节点 是不是得递归实现、递归 1到n 求和 C语言、一个小程序问题好多啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10094839.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存