2016-01-25 90 views
-4

我是数据结构的新手。我试图使用链表来实现二叉树。在java中实现二叉树

我需要一些说明来实现它。 i)为了在树中插入一个新的值,在实现它时是否应该回溯和树遍历。

ii)请为我推荐搜索和删除值的例子。

iii)请为我提供实现所有类型树的正确材料。

+0

这比一个SO问题.. – sinclair

+0

@sinclair我无法从谷歌得到正确的指引一个谷歌的问题,这就是为什么我在SO – Yuvi

+0

一个LinkedList发布了独木不成很有意义,因为一个节点在树中有多个子节点,而LinkedList只有一个向前的“链接” –

回答

1

你的链接列表应该显示如下:a->b->c->d->e->f-> ... 你的树在最后看起来像图片。 其中a是有左孩子b和右孩子c的根。 b已经离开了孩子d和正确的孩子e,而c只剩下了一个孩子f。 i)你可以把新的值放在链表的末尾。没有必要旅行树

ii)我假设你的树不会是一个排序的二叉树。因此,为了搜索k值,您需要浏览整个链接列表。这将需要O(n)作为你的时间。

要删除变量,您可以删除链接列表中的节点,并且所有内容都将被移动。所以例如在上面的图片中,如果你删除了d,你可以在f将要替换的图片中看到结果d。

iii)你能说明所有类型的树是什么意思吗?

希望这会有所帮助。

Deleting a node

+0

关于二叉树通过链表的建议是好的,在二叉树这里没有必要知道关于左边或右边的孩子。但我想要一个适用于所有类型树的标准程序,它可以是二叉搜索树,n-ary树等等。例如:让我们考虑一个二叉搜索树,其中插入节点将是不同的,考虑左节点和右节点。请你建议我该如何处理它。一世。e我需要父和子之间的连接遍历 – Yuvi

+0

如果左右孩子不同,那么在您的链表中,第n个节点右孩子将是第(2n)个节点,其左孩子将是(2n + 1)节点。所以你可以找到每个节点的孩子。这是二叉树。您可以将相同的东西展开为n-ary树。例如,如果它是5-树,则第n个节点的孩子将是:5n-3,5n-2,5n-1,5n和5n + 1 –