从根矩阵对 OBST 进行前序遍历
Posted
技术标签:
【中文标题】从根矩阵对 OBST 进行前序遍历【英文标题】:Preorder traversal of OBST from root matrix 【发布时间】:2013-07-14 23:08:26 【问题描述】:我正在尝试对 OBST 进行预订遍历并以文件格式打印出来。我正在正确计算 OBST 的成本和根矩阵。我也可以以正确的格式输出树节点,但我无法弄清楚如何显示没有孩子的父节点。
根矩阵的哪一部分表示一个节点没有孩子或只有一个孩子?我了解如何遍历它,并正确输出节点,而不是没有孩子的节点。
例如:元素是 A, B, C, D,概率为 10, 20, 40, 30。
我计算成本矩阵和根矩阵,然后使用根矩阵输出一棵树。它应该是这样的:
C
B
A
_
_
_
D
_
_
我的看起来像这样:
C
B
A
_
_
_
D
_
这是我的预购功能:
void PrintTree(int i, int j, int space)
if(i < j)
outfile.write("", space++);
outfile<<A[Rt[i][j]]<<endl;
PrintTree(i, Rt[i][j], space);
outfile.write("",space); //This line
outfile<<"-"<<endl; //This line
PrintTree(Rt[i][j] + 1, j, space);
我几乎 100% 确定递归调用之间的行要么是错误的,要么甚至不应该存在。基本上,我如何正确地将这些破折号格式化为不存在的孩子。
【问题讨论】:
最优二叉搜索树抱歉... 我的错,对不起,但我不认为 obst 是一个广泛使用的首字母缩写词 很好,我解决了我的问题,现在我只需要弄清楚为什么我将奇怪的字符输出到文件中。 【参考方案1】:我刚刚回答了我自己的问题。
应该是:
void PrintTree(int i, int j, int space)
if(i < j)
outfile.write("", space++);
outfile<<A[Rt[i][j]]<<endl;
PrintTree(i, Rt[i][j], space);
PrintTree(Rt[i][j] + 1, j, space);
else
outfile.write("",space); //This line
outfile<<"-"<<endl;
这适用于小树......但现在我得到了奇怪的字符。
Ì ...我不知道这是从哪里来的,因为它不会在输入小于 10 时发生。
【讨论】:
以上是关于从根矩阵对 OBST 进行前序遍历的主要内容,如果未能解决你的问题,请参考以下文章