c - 树遍历(preorder,inorder,postorder)打印结果变化
问题描述
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
void preorder(char tree[], int i)
{
if(tree[i] != '\0')
{
printf("%c", tree[i]);
preorder(tree, i*2);
preorder(tree, i*2+1);
}
}
void inorder(char tree[], int i)
{
if(tree[i] != '\0')
{
inorder(tree, i*2);
printf("%c", tree[i]);
inorder(tree, i*2+1);
}
}
void postorder(char tree[], int i)
{
if(tree[i] != '\0')
{
postorder(tree, i*2);
postorder(tree, i*2+1);
printf("%c", tree[i]);
}
}
void main()
{
char ArrayTree[36] = { 0,'A','B','C','D','E','F','G','H','I','J','K',0, };
printf("\n preorder : ");
preorder(ArrayTree, 1);
printf("\n inorder: ");
inorder(ArrayTree, 1);
printf("\n postorder: ");
postorder(ArrayTree, 1);
getchar();
}
当前打印结果
预购:ABDHIEJKCFG / 预购:HDIBJEKAFCG / 后购:HIDJKEBFGCA /
但我想这样打印
前序:ABDHEIJCFGK / 序:HDBIEJAFCGK / 后序:HDIJEBFKGCA /
如何改变它?
解决方案
代码看起来正确,但您的数据错误。它不代表图表中的树。例如,右兄弟'H'
应该是 0(或 NULL)。
校正后的数组如下所示:
char ArrayTree[32] = { 0,'A','B','C','D','E','F','G','H',0,'I','J',0,0,0,'K' };
大小只需为 32 即可包含高度为 5 的完整树(加上未使用的 0 索引)。
推荐阅读
- javascript - 解析一行文本并在给定单词之前动态插入换行符?
- python - 将 DF 行乘以系数
- algorithm - 证明通过该算法将无向图变成有向图的最大出度的 O(log n) 的上界
- ios - 在 CI::GLContext::init() 处崩溃 EXC_BAD_ACCESS KERN_INVALID_ADDRESS
- ios - ARKit:特征点检测通知?
- python - pandas 按项目分组并在组内排序
- javascript - Tensorflow.js LSTM 时间序列预测
- javascript - 需要 JS 帮助 - 观看 google 表格专栏,通过 gmail 发送电子邮件以获取更新值
- azure - 用于 Bot Framework DirectLine 通道配置的 Azure 资源管理 REST API
- java - 使用休眠连接两个表