Level Order traversal of a generic tree(n-ary tree) in java

前端 未结 2 1605
Happy的楠姐
Happy的楠姐 2020-12-07 06:23

(In case you want to avoid the lengthy explanation, all I am looking for is a level order traversal for a generic-tree(n-ary tree) in java. The code supplied works and needs

2条回答
  •  心在旅途
    2020-12-07 06:54

    Level-order traversal using Queue:

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Objects;
    import java.util.Queue;
    import java.util.stream.Collectors;
    
    public class LevelOrderTraversal {
        static class Node {
            int data;
    
            Node children[];
    
            Node(int data, int n) {
                children = new Node[n];
                this.data = data;
            }
        }
    
        public static void main(String[] args) {
            /*  
                           1 
                        /  |  \ 
                       2   3   4 
                     / | \ 
                    5  6  7 
            */
            int n = 3;
            Node root = new Node(1, n);
            root.children[0] = new Node(2, n);
            root.children[1] = new Node(3, n);
            root.children[2] = new Node(4, n);
            root.children[0].children[0] = new Node(5, n);
            root.children[0].children[1] = new Node(6, n);
            root.children[0].children[2] = new Node(7, n);
    
            List> levelList = levelOrder(root);
            for (List level : levelList) {
                for (Integer val : level) {
                    System.out.print(val + " ");
                }
                System.out.println();
            }
        }
    
        public static List> levelOrder(Node root) {
            List> levelList = new ArrayList<>();
    
            if (root == null) {
                return levelList;
            }
    
            Queue queue = new LinkedList<>();
            queue.add(root);
    
            while (!queue.isEmpty()) {
                int n = queue.size();
                List level = new ArrayList<>();
    
                while (n-- > 0) {
                    Node node = queue.remove();
                    level.add(node.data);
                    queue.addAll(Arrays.stream(node.children).filter(Objects::nonNull).collect(Collectors.toList()));
                }
                levelList.add(level);
            }
            return levelList;
        }
    
    }
    

提交回复
热议问题