给定一个任意排序的树,如何找到任意元素集的第一个和最后一个元素?

时间:2012-02-11 06:04:18

标签: algorithm tree ordered-tree

我有一棵树,由TreeItems构成。每个TreeItem都有以下方法:

TreeItem   TreeItem::getParent()
TreeItem[] TreeItem::getChildren()
int        TreeItem::indexOf(TreeItem childItem)

我也有一组来自这棵树的无序TreeItems。我想快速找到这个集合的第一个元素和最后一个元素。

任何聪明的想法?

1 个答案:

答案 0 :(得分:0)

选择集合中的一个树项目(我假设给定集合是子树),然后首先找到该集合的父项:

while (element.getParent()!=null)
  element = element.getParent();
parent = element;

现在你有了父母,你只需要递归地迭代它的孩子:

TreeItem TreeItem::getLastChild()
{
 children = getChildren();
 if (children == null)
   return parent;

 int maxIndex = 0;

   // find child with maximum index
   .....

  return foundedChild.getLastChild();
}