树遍历。有序,预订,后序

时间:2012-09-30 19:24:05

标签: algorithm tree binary-tree

我理解树遍历和实现背后的想法,但这是问题。 为什么我们都需要它们?

现在我只知道在解析数学表达式时使用了前序遍历。 从维基百科我也读过:

  • 在二元搜索树上使用inorder遍历时,顺序遍历特别常见,因为根据设置二叉搜索树的比较器(因此名称),它将按顺序从基础集返回值。 预订遍历
  • 在将值插入新树时预先遍历树是制作二叉搜索树的完整副本的常用方法。 也可以使用preorder遍历从表达式树中获取前缀表达式(波兰表示法):预先遍历表达式树。 (我已经说过了)

但这些例子相当含糊。任何人都可以更深入地描述这一点。特别是举例。

2 个答案:

答案 0 :(得分:5)

考虑在目录树上执行某些文件操作的问题。当操作删除文件时,您需要在删除目录之前清空每个目录,因此需要进行后期遍历。相比之下,复制层次结构时,需要先复制目录,然后才需要进行预订遍历。

老实说,我不明白有关BST有序遍历的含糊不清。当您想在用户界面中在屏幕上显示BST的内容时,您希望键显示已排序,不是吗? (如果你没有,那么使用BST可能是一个坏主意,因为哈希表通常更快。)

答案 1 :(得分:3)

我可以想到很多例子。以性能为例。

想象一下现实生活中的一棵树。它有一个茎,茎有3个分支。每个内部分支具有3个外部分支。所以它有9个外部分支。

3个内部分支中的一个已死亡,随后其3个外部分支也已死亡。

现在你要削减所有枯枝。树有13个分支(1个茎3个内部,9个外部)。您是否必须单独查看它们以确定是否要切割它们?否

现在想象一下,有一个机器人想要切断所有枯枝。 在它的软件中,它看着干......它死了吗?不,它然后看第一个内部分支是否死了?是!然后它将切断那个分支,同时它的外部分支将被切断。

而不是做出13个选择它只需要做出10个。(茎,2个健康的内部分支,它们的6个外部分支和生病的内部分支)