Traverse to the deepest using Java

前端 未结 2 948
再見小時候
再見小時候 2021-01-06 00:59

I have a data structure like below:

Task(id,name,subTasks[Task])

But the problem is the subTasks can contain Tasks which have another subTa

相关标签:
2条回答
  • 2021-01-06 01:23

    Use Guava TreeTraverser:

    Task root = ...
    
    /*
     * For example, you have the following tree:
     *
     *          h
     *        / | \
     *       /  e  \
     *      d       g
     *     /|\      |
     *    / | \     f
     *   a  b  c        
     */
    
    TreeTraverser<Task> traverser = new TreeTraverser<Task>() {
        @Override
        public Iterable<Task> children(Task root) {
            return root.subTasks;
        }
    };
    

    Then you can iterate over the tree with for loop in several ways:

    // Iterate in breadth-first order (hdegabcf)
    for (Task task : traverser.breadthFirstTraversal(root)) { ... }
    

    or

    // Iterate in preorder (hdabcegf)
    for (Task task : traverser.preOrderTraversal(root)) { ... }
    

    or

    // Iterate in postorder (abcdefgh)
    for (Task task : traverser.postOrderTraversal(root)) { ... }
    
    0 讨论(0)
  • 2021-01-06 01:35

    Data structure: the implicit tree formed by object references.

    Traversal: recursion or queues.

    However, you will have to consider each use case individually. Some will call for depth-first traversal, some for breadth-first traversal. Consider using some graph library to build the trees in the first place if you need a lot of graph operations.

    0 讨论(0)
提交回复
热议问题