C语言递归建立二叉树时遇到的指针问题:建立的二叉树无法返回调用函数

C语言递归建立二叉树时遇到的指针问题:建立的二叉树无法返回调用函数,第1张

你的说法是有问题的。

通常说,通过指针作为函数的参数,可以再被调函数中,修改实际参数所指向的变量的值,也就是把改变传递给主调函数。

但是,请看清楚上面的说法,“通过指针作为函数的参数,可以再被调函数中,修改实际参数所指向的变量的值”。是修改实际参数所指向的变量的值,而不是修改实际参数本身。

你的代码里面是要修改实际参数本身,而不是修改实际参数所指向变量。

要完成这个功能,你就需要指向指针的指针了

给个思路:

    找最大值的关键是树的遍历,而递归的遍历方式,就是利用函数调用,参数的入栈出栈,来达到回溯的目的,同理,不用递归调用,我们也可以采用这个思想

创建一个栈式的数据结构

将根节点指针压入栈中,访问其值,假如我们采用广度优先的遍历方式,就遍历其子节点

在访问子节点的同时,依次将访问过的节点指针压入栈中,而最上面的节点就是最后访问的节点

如最上面的节点是叶子节点,则d栈,否则继续遍历其子节点,并如3步所说,依访问顺序压栈

对于所有子节点都已遍历(压栈)的父节点,做标记,则当d栈后,栈的最上面是一个带有标记的非叶子节点,亦将其d出栈

循环3-5步,直到栈空为止

深度优先搜索,也可以用类似的方式实现

Found out how to inspect the trees, by running the view() command Eg for inspecting the first tree of the example:

view(BTrees{1})

每调用一次scanf输入终止就要一次回车,假设你的树有7个节点,以每一个回车结束,需输入字符,回车,字符,回车共七次,然后最后输入'空格'共7+7=14个,才会退出! 考虑是否可以采用一次输入的形式,如输入字符串?scanf("%s",%str); 将输入放在起始创建根节点时,将字符串指针递归的传递。

// 生成树结构

function tree(list) {

const result = [];

for (let value of list) {

// 排除空字符串的情况

if (!value) {

continue;

}

const values = valuesplit('/');

// 查找树结构的当前级别是否已经存在,不存在则创建对象,并添加入列表。

let current = resultfind(item => itemname === values[0]);

if (current === void 0) {

current = {};

resultpush(current);

}

for (let i = 0, length = valueslength; i < length; i++) {

currentname = values[i];

if (i < length - 1) {

// 如果还有下一级内容,判断当前是否有 children,没有则构建

if (currentchildren === void 0) {

currentchildren = [];

}

// 查找下一级对象,为下一遍遍历构建对象

let nextCurrent = currentchildrenfind(item => itemname === values[i + 1]);

if (nextCurrent === void 0) {

nextCurrent = {};

currentchildrenpush(nextCurrent);

}

current = nextCurrent;

}

}

}

return result;

}

============ 假装分割线 ===========

以上代码是生成树的函数,调用 tree 函数并传入你的 input 数据,返回值就是生成的树。百科没找到传代码的地方了。

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

原文地址: http://outofmemory.cn/langs/12183335.html

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

发表评论

登录后才能评论

评论列表(0条)

保存