Реализация общего дерева в Java

Вы также можете использовать matplotlib для этого.

import matplotlib.image as mpimg

img = mpimg.imread('abc.tiff')
print(type(img))

output:

37
задан Ivan Koblik 31 August 2009 в 09:58
поделиться

7 ответов

Я использую XML DOM (XML описывает древовидную структуру) и, в частности, XOM с открытым исходным кодом ( http://www.xom.nu ). Это легкий, узлы могут быть разделены на подклассы, если требуется, и очень часто используются и тестируются. Он может быть больше, чем вам требуется, но его преимущество состоит в том, что любые методы навигации по дереву (предки, братья и сестры и т. Д.) Полностью управляются через XPath. Вы также можете сериализовать дерево и преобразовать его с помощью проверенных методов XML. Также существует сильное сообщество пользователей

0
ответ дан 27 November 2019 в 04:43
поделиться

Нет ' ta Класс дерева в библиотеках коллекций. Однако в Swing Frameworks есть есть . DefaultTreeModel

Я использовал это в прошлом, и он хорошо работает. Он действительно втягивает в ваше приложение дополнительные классы, хотя это может быть или нежелательно.

Вы также можете моделировать Дерево, используя другую коллекцию и сохраняя в ней коллекции. Например. Список списков.

9
ответ дан 27 November 2019 в 04:43
поделиться

Вот оно:

abstract class TreeNode implements Iterable<TreeNode> {

  private Set<TreeNode> children;

  public TreeNode() {
    children = new HashSet<TreeNode>();
  }

  public boolean addChild(TreeNode n) {
    return children.add(n);
  }

  public boolean removeChild(TreeNode n) {
    return children.remove(n);
  }

  public Iterator<TreeNode> iterator() {
    return children.iterator();
  }
}

Мне доверяют, но я не тестировал реализацию.

23
ответ дан 27 November 2019 в 04:43
поделиться

Я нашел реализацию Общего дерева (с тестами) здесь:

http://vivin.net/2010/01/30/generic-n-ary-tree-in-java/

Я думаю, это то, что вы ищете.

5
ответ дан 27 November 2019 в 04:43
поделиться

Ах, я собирался разместить бесстыдный плагин к моему решению и увидел, что кто-то уже разместил ссылку на него. Да, у меня была такая же проблема, и в итоге я написал свое собственное Дерево Общей Троицы. У меня есть тесты для узла дерева и самого дерева.

Я реализовал узел как объект, имеющий поле данных и список узлов (которые являются дочерними по отношению к этому узлу).

http://vivin.net/2010/01/30/generic-n-ary-tree-in-java/

6
ответ дан 27 November 2019 в 04:43
поделиться

Переменная $? содержит последние команды, возвращающие код

EDIT: точный пример:

git status &> /dev/null
if [ $? -eq 0 ]; then
  echo "git status exited successfully"
else
  echo "git status exited with error code"
fi
-121--2449719-

web4j может быть тем, что вы просите. Тем не менее, это не то, что популярным и вашим разработчикам придется учиться рамка тоже. Я думаю, это будет быстрее, чем изучение нового языка.

Я считаю, что построение рамки в java или .Net, которая напоминает RoR или DJango, очень сложно. Это потому, что языки очень разные. Также потому, что Java и .Net нацелены на корпоративный рынок, который обычно требует большей надежности.

-121--4293879-

Я нашел абсолютно фантастическую библиотеку http://jung.sourceforge.net , см. javadoc http://jung.sourceforge.net/doc/api/index.html . Это гораздо больше, чем просто графическая реализация. С его помощью можно визуализировать и раскладывать графики; плюс, он имеет множество стандартных алгоритмов графов, которые вы можете использовать из коробки. Иди, проверь! Хотя в итоге я реализовал свой собственный базовый график (раньше я не знал о JUNG), я использую эту библиотеку для визуализации. Выглядит очень аккуратно!

2
ответ дан 27 November 2019 в 04:43
поделиться

Довольно трудно сделать настоящую общую реализацию дерева в Java, которая действительно отделяла бы операции и свойства дерева от базовых реализаций, т.е. вставьте RedBlackTreeNode и переопределите пару методов, чтобы получить реализацию RedBlackTree, сохранив при этом все общие операции, которые содержит интерфейс BinaryTree.

Кроме того, идеальная абстракция могла бы менять местами низкоуровневое представление дерева, например, неявную структуру двоичного дерева, хранящуюся в массиве, на Heap или интерфейс Node-base с указателями на левый и правый дочерние узлы, или множественными дочерними указателями, или дополнить любое из вышеперечисленного указателями на родителя, или передавать потоки на листовые узлы, и т.д., и т.п., и т.п.

Я попытался решить эту проблему самостоятельно, но в итоге получился довольно сложный интерфейс, который, тем не менее, обеспечивает безопасность типов. Вот скелет идеи, который устанавливает абстрактный класс BinaryTree с нетривиальной операцией (Euler Tour), которая будет работать даже при изменении базового класса узлов или класса дерева. Возможно, ее можно улучшить, введя идею курсоров для навигации и определения положения в структуре дерева:

public interface Tree<E, P extends Tree.Entry<E, P>> extends Collection<E>
{
   public P getRoot();
   public Collection<P> children(P v);
   public E getValue(P v);

   public static interface Entry<T, Q extends Entry<T, Q>> { }
}

public interface BinaryTree<E, P extends BinaryTree.Entry<E, P>> extends Tree<E, P>
{
   public P leftChild(P v);
   public P rightChild(P v);

   public static interface Entry<T, Q extends Entry<T, Q>> extends Tree.Entry<T, Q>
   {
      public Q getLeft();
      public Q getRight();
   }
}

public interface TreeTraversalVisitor<E, P extends BinaryTree.Entry<E, P>, R> 
{
   public R visitLeft( BinaryTree<E, P> tree, P v, R result );
   public R visitCenter( BinaryTree<E, P> tree, P v, R result );
   public R visitRight( BinaryTree<E, P> tree, P v, R result );
}

public abstract class AbstractBinaryTree<E, P extends BinaryTree.Entry<E, P>> extends AbstractCollection<E> implements BinaryTree<E, P>
{
   public Collection<P> children( P v )
   {
      Collection<P> c = new ArrayList<P>( 2 );

      if ( hasLeft( v ))
         c.add( v.getLeft());

      if ( hasRight( v ))
         c.add( v.getRight());

      return c;
   }

   /**
    * Performs an Euler Tour of the binary tree
    */
   public static <R, E, P extends BinaryTree.Entry<E, P>> 
   R eulerTour( BinaryTree<E, P> tree, P v, TreeTraversalVisitor<E, P, R> visitor, R result )
   {
      if ( v == null )
         return result;

      result = visitor.visitLeft( tree, v, result );

      if ( tree.hasLeft( v ))
         result = eulerTour( tree, tree.leftChild( v ), visitor, result );

      result = visitor.visitCenter( tree, v, result );

      if ( tree.hasRight( v ))
         result = eulerTour( tree, tree.rightChild( v ), visitor, result );

      result = visitor.visitRight( tree, v, result );

      return result;
   }    
}
8
ответ дан 27 November 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: