鱼C论坛

 找回密码
 立即注册
查看: 1975|回复: 2

[已解决]二叉递规如果改成最普通最朴实的代码

[复制链接]
发表于 2023-5-11 13:00:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
因为二叉的递规会导致我用的工具不定时崩溃,所以有没有师兄师姐们愿意指定下小师弟,谢谢!!!参考代码如下:
比如能否用循环遍历之类的去代替那些递规,我尝试过,但这关系对于我太过复杂
.子程序 二叉树遍历
.参数 首地址, 整数型
.参数 结束标志, 整数型
.参数 次数, 整数型
.参数 对象数组, 整数型, 参考 数组
.参数 进程句柄, 整数型
.局部变量 L, 整数型
.局部变量 R, 整数型
.局部变量 x, 整数型

.如果真 (首地址 ≤ 0)
    返回 ()
.如果真结束
.如果真 (次数 > 100)
    返回 ()
.如果真结束
次数 = 次数 + 1
x = 内存_读整数型 (进程句柄, 首地址 + 16)
加入成员 (对象数组, x)
L = 内存_读整数型 (进程句柄, 首地址)
R = 内存_读整数型 (进程句柄, 首地址 + 8)
.如果真 (L ≠ 结束标志)
    二叉树遍历 (L, 结束标志, 次数, 对象数组, 进程句柄)
.如果真结束
.如果真 (R ≠ 结束标志)
    二叉树遍历 (R, 结束标志, 次数, 对象数组, 进程句柄)
最佳答案
2023-5-11 13:00:50
这段代码是使用递归实现的二叉树遍历,如果想要使用循环来代替递归,可以使用栈来实现。

具体步骤如下:

1. 首先将根节点入栈。

2. 当栈不为空时,取出栈顶元素,并将其左右子节点依次入栈。

3. 对取出的元素进行处理,比如加入到对象数组中。

4. 重复步骤2和步骤3,直到栈为空。

下面是具体的代码实现:
.子程序 二叉树遍历.参数 首地址, 整数型.参数 结束标志, 整数型.参数 对象数组, 整数型, 参考 数组.参数 进程句柄, 整数型.局部变量 栈, 整数型, 参考 数组.局部变量 栈顶, 整数型.局部变量 当前节点, 整数型栈 = 新建数组 (100)   // 栈的大小可以根据实际情况调整栈顶 = 0将元素入栈 (栈, 首地址).当 (栈顶 ≥ 0)    当前节点 = 弹出栈顶元素 (栈)    .如果真 (当前节点 ≤ 0)        继续    对象 = 内存_读整数型 (进程句柄, 当前节点 + 16)    加入成员 (对象数组, 对象)    左子节点 = 内存_读整数型 (进程句柄, 当前节点)    右子节点 = 内存_读整数型 (进程句柄, 当前节点 + 8)    .如果真 (右子节点 ≠ 结束标志)        将元素入栈 (栈, 右子节点)    .如果真 (左子节点 ≠ 结束标志)        将元素入栈 (栈, 左子节点).循环结束
这样就可以用循环代替递归来实现二叉树的遍历了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-11 13:00:50 | 显示全部楼层    本楼为最佳答案   
这段代码是使用递归实现的二叉树遍历,如果想要使用循环来代替递归,可以使用栈来实现。

具体步骤如下:

1. 首先将根节点入栈。

2. 当栈不为空时,取出栈顶元素,并将其左右子节点依次入栈。

3. 对取出的元素进行处理,比如加入到对象数组中。

4. 重复步骤2和步骤3,直到栈为空。

下面是具体的代码实现:
.子程序 二叉树遍历.参数 首地址, 整数型.参数 结束标志, 整数型.参数 对象数组, 整数型, 参考 数组.参数 进程句柄, 整数型.局部变量 栈, 整数型, 参考 数组.局部变量 栈顶, 整数型.局部变量 当前节点, 整数型栈 = 新建数组 (100)   // 栈的大小可以根据实际情况调整栈顶 = 0将元素入栈 (栈, 首地址).当 (栈顶 ≥ 0)    当前节点 = 弹出栈顶元素 (栈)    .如果真 (当前节点 ≤ 0)        继续    对象 = 内存_读整数型 (进程句柄, 当前节点 + 16)    加入成员 (对象数组, 对象)    左子节点 = 内存_读整数型 (进程句柄, 当前节点)    右子节点 = 内存_读整数型 (进程句柄, 当前节点 + 8)    .如果真 (右子节点 ≠ 结束标志)        将元素入栈 (栈, 右子节点)    .如果真 (左子节点 ≠ 结束标志)        将元素入栈 (栈, 左子节点).循环结束
这样就可以用循环代替递归来实现二叉树的遍历了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-5-11 13:08:38 | 显示全部楼层
isdkz 发表于 2023-5-11 13:00
这段代码是使用递归实现的二叉树遍历,如果想要使用循环来代替递归,可以使用栈来实现。

具体步骤如下:

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 22:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表