zxczxc5484 发表于 2023-5-11 13:00:06

二叉递规如果改成最普通最朴实的代码

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

.如果真 (首地址 ≤ 0)
    返回 ()
.如果真结束
.如果真 (次数 > 100)
    返回 ()
.如果真结束
次数 = 次数 + 1
x = 内存_读整数型 (进程句柄, 首地址 + 16)
加入成员 (对象数组, x)
L = 内存_读整数型 (进程句柄, 首地址)
R = 内存_读整数型 (进程句柄, 首地址 + 8)
.如果真 (L ≠ 结束标志)
    二叉树遍历 (L, 结束标志, 次数, 对象数组, 进程句柄)
.如果真结束
.如果真 (R ≠ 结束标志)
    二叉树遍历 (R, 结束标志, 次数, 对象数组, 进程句柄)

isdkz 发表于 2023-5-11 13:00:50

这段代码是使用递归实现的二叉树遍历,如果想要使用循环来代替递归,可以使用栈来实现。

具体步骤如下:

1. 首先将根节点入栈。

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

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

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

下面是具体的代码实现:

.子程序 二叉树遍历
.参数 首地址, 整数型
.参数 结束标志, 整数型
.参数 对象数组, 整数型, 参考 数组
.参数 进程句柄, 整数型
.局部变量 栈, 整数型, 参考 数组
.局部变量 栈顶, 整数型
.局部变量 当前节点, 整数型

栈 = 新建数组 (100)   // 栈的大小可以根据实际情况调整
栈顶 = 0
将元素入栈 (栈, 首地址)
.当 (栈顶 ≥ 0)
    当前节点 = 弹出栈顶元素 (栈)
    .如果真 (当前节点 ≤ 0)
      继续
    对象 = 内存_读整数型 (进程句柄, 当前节点 + 16)
    加入成员 (对象数组, 对象)
    左子节点 = 内存_读整数型 (进程句柄, 当前节点)
    右子节点 = 内存_读整数型 (进程句柄, 当前节点 + 8)
    .如果真 (右子节点 ≠ 结束标志)
      将元素入栈 (栈, 右子节点)
    .如果真 (左子节点 ≠ 结束标志)
      将元素入栈 (栈, 左子节点)
.循环结束


这样就可以用循环代替递归来实现二叉树的遍历了。

zxczxc5484 发表于 2023-5-11 13:08:38

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

具体步骤如下:

谢谢
页: [1]
查看完整版本: 二叉递规如果改成最普通最朴实的代码