【问题标题】:Construct binary tree of pre-order, post-order and in-order expression构造前序、后序和中序表达式的二叉树
【发布时间】:2013-05-05 04:58:22
【问题描述】:

我搜索了互联网和“you tube”,但没有找到任何好的教程。 如何在“后缀”中绘制给定表达式对应的“二叉树”?

这个表达式在中缀和前缀中的外观如何?

我不知道我应该如何一步一步地做到这一点:(

18 5 1 + / 4 * 3 5 18 6 / - + -

注意:

绘制前序、后序和中序的规则是: 1.前序遍历:root,left,right 2.后序遍历:left,right,root 3.中序遍历:左根,右

我需要它来考试

【问题讨论】:

  • 请说明您需要什么。绘制二叉树意味着构建二叉树或实际绘制一些东西?
  • 我想将此表达式显示为二叉树。 (以根为父节点,以左/右节点为子节点的树)。实际上我给了树的节点(在这个问题中 15 个节点)
  • 是的,我们知道二叉树是什么。我不知道你有什么要求。递归打印一棵树是一项基本练习,因为您似乎是一名 CS 学生,所以您应该知道这一点。下面详细介绍从 postfix 构建树。

标签: inorder preorder postorder


【解决方案1】:

从左到右扫描表达式。当您找到一个数字时,构建一个(叶)节点,然后将其压入堆栈。当你找到一个操作符时,构建一个节点,从堆栈中弹出两个节点,将它们连接为当前节点的左右子节点,然后将节点压入堆栈并继续。在字符串的末尾,您必须只有堆栈上的根

当你有树时,查找前缀和中缀是微不足道的。

请注意,这是基于每个运算符都有两个值的假设(可以很容易地适应一元运算符),即每个内部节点都有两个子节点。一般来说,不可能从 postfix 构建树(参见 wikipedia)。

【讨论】:

  • 感谢您最后的笔记。但这个解释对我来说是模棱两可的。你能通过画树一步一步地给他们看吗?或者您是否知道您的电子管或任何其他逐步显示级别的站点的链接。我是这个主题的新手。我不知道我们应该将节点放在每个级别的右侧还是左侧。提前致谢
  • 有一篇很棒的 Wikipedia 文章你应该之前检查过...en.wikipedia.org/wiki/Binary_expression_tree
  • 谢谢。在wiki的文章中(en.wikipedia.org/wiki/…绘制post-fix的步骤。应该如何绘制pre-fix。假设我们有(+ * - M N P / R S)。有什么区别?我的意思是我们应该从表​​达权开始吗?
猜你喜欢
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
相关资源
最近更新 更多