从根矩阵对 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 进行前序遍历的主要内容,如果未能解决你的问题,请参考以下文章

二叉树遍历-前序|中序|后序|层次 python实现

二叉树的前中后层序遍历

小白学算法8.二叉树的遍历,前序中序和后序

多杈树的邻接矩阵实现--插入删除前序遍历

LeetCode 144 ——二叉树的前序遍历

遍历及线索化二叉树