我正在考虑实现二叉搜索树。我已经实现了一些非常基本的操作,例如搜索,插入,删除。二叉搜索树问题
请分享您的经验,我可以在二叉搜索树上执行所有其他操作,以及在任何给定情况下每次都需要执行一些实时操作(基本)..我希望我的问题很明确..
谢谢。
我正在考虑实现二叉搜索树。我已经实现了一些非常基本的操作,例如搜索,插入,删除。二叉搜索树问题
请分享您的经验,我可以在二叉搜索树上执行所有其他操作,以及在任何给定情况下每次都需要执行一些实时操作(基本)..我希望我的问题很明确..
谢谢。
至少,二叉搜索树应该有插入,删除和搜索操作。任何其他操作将取决于你打算如何处理你的树,尽管一些通用的建议是:返回给定节点的父节点,查找给定节点的左侧和右侧子节点,返回根节点,预先排序,中间排序和后序遍历,以及广度优先遍历。
-1他已经说过他实现了这些。 – 2010-05-24 23:35:47
@Jason Hall - 对于同意插入,删除和搜索确实需要每次在任何给定情况下都很抱歉。 – angstrom91 2010-05-24 23:45:05
尝试遍历操作(例如,按顺序将树中的元素作为List返回),并确保在插入/删除元素时树保持平衡。
你在谈论平衡搜索树吗? – AGeek 2010-05-24 23:45:52
是的,这是一个二叉树进一步到BST:红黑色,AVL等。二叉树本身并没有多大用处 – 2010-05-24 23:56:46
如果这是功课,祝你好运!
如果这是好奇,玩得开心!
如果你想要在生产代码中实现这一点,甚至不知道基本操作,不要这样做!
http://www.boost.org/doc/libs/1_38_0/boost/graph/detail/array_binary_tree.hpp
如果你真的只是想的东西的清单可能有用或有趣的实现...
你可能想看看返回树的不同方式:
如果您感觉特别冒险,可以采用数组并将其作为树导入。有一个特定的格式,这就像(1(2(3)),(5) - 这个例子是不平衡的,但你得到的想法,它在维基百科上
你可能也想执行旋转操作A rotation在不改变元素顺序的情况下更改结构,通常用于平衡树(以确保叶子全部接近相同深度),也可用于将根改为一个给定的元素,如果你知道它会更频繁地出现在搜索中。
我的ASCII艺术不是很大,但是旋转可以把这个树:
f
d g
b e
a c
成树:
d
b f
a c e g
第二棵树被平衡将使搜索f和g慢,并且在e保持不变的情况下更快地搜索d,a,b,c。
我想我看过某处“地图”操作。当您用单调函数更改树的所有元素时。即(f(x + dx)> = f(x))或始终下降(f(x + dx)< = f(x))的函数。在一种情况下,您需要将该函数应用于其他节点,您还需要镜像树(交换“左”和“右”节点),因为结果值的顺序将被颠倒。
你想要做什么?你可以将它们应用于许多情况,但是如果你没有特定的情况,很难告诉你你需要什么 – Claudiu 2010-05-24 23:36:17
我很好奇学习树木,所以寻找一些好的网站列出所有可能的操作在树上,它的应用和各种类型的树..我已经通过维基文章,但这些都是基本的。我需要去一个进步的水平.. PS:这不是一个硬件。 – AGeek 2010-05-24 23:47:52
维基百科的文章实际上是最好的来源之一:http://en.wikipedia.org/wiki/Binary_tree它的异常清晰和写得很好的维基百科计算机科学主题 – 2010-05-24 23:59:13