|  | 
|  | 1 | +# Author: Parameswaran | 
|  | 2 | + | 
|  | 3 | +# sample object | 
|  | 4 | +class Sample: | 
|  | 5 | +    def __init__(self, data_description, node_id, parent_id=""): | 
|  | 6 | +        self.data_description = data_description | 
|  | 7 | +        self.node_id = node_id | 
|  | 8 | +        self.parent_id = parent_id | 
|  | 9 | + | 
|  | 10 | + | 
|  | 11 | +# Node structure (Basically N-ary Tree) | 
|  | 12 | +class Node: | 
|  | 13 | +    def __init__(self, data): | 
|  | 14 | +        self.data = Sample(data['data_description'], data['node_id'], data['parent_id']) | 
|  | 15 | +        self.children = [] | 
|  | 16 | + | 
|  | 17 | + | 
|  | 18 | +class Tree: | 
|  | 19 | +    def __init__(self, data): | 
|  | 20 | +        self.Root = data | 
|  | 21 | + | 
|  | 22 | +    def insert_child(self, root, new_node): | 
|  | 23 | + | 
|  | 24 | +        #  if the list item's parent_id is equal to the current node it will append the node in their child array. | 
|  | 25 | + | 
|  | 26 | +        if root.data.node_id == new_node.data.parent_id: | 
|  | 27 | +            root.children.append(new_node) | 
|  | 28 | + | 
|  | 29 | +        # else it will check all the node and their children list whether the parent_id is same. | 
|  | 30 | + | 
|  | 31 | +        elif len(root.children) > 0: | 
|  | 32 | +            for each_child in root.children: | 
|  | 33 | +                # it will create a recursive call for all nodes to treate as a root and search for all its child_list nodes | 
|  | 34 | +                self.insert_child(each_child, new_node) | 
|  | 35 | + | 
|  | 36 | +    def print_tree(self, root, point): | 
|  | 37 | +        print(point, root.data.node_id, root.data.parent_id, root.data.data_description) | 
|  | 38 | +        if len(root.children) > 0: | 
|  | 39 | +            point += "_" | 
|  | 40 | +            for each_child in root.children: | 
|  | 41 | +                self.print_tree(each_child, point) | 
|  | 42 | + | 
|  | 43 | + | 
|  | 44 | +data = {'data_description': 'Sample_root_1', 'node_id': '1', 'parent_id': ''} | 
|  | 45 | +data1 = {'data_description': 'Sample_root_2', 'node_id': '2', 'parent_id': '1'} | 
|  | 46 | +data2 = {'data_description': 'Sample_root_3', 'node_id': '3', 'parent_id': '1'} | 
|  | 47 | +data3 = {'data_description': 'Sample_root_4', 'node_id': '4', 'parent_id': '2'} | 
|  | 48 | +data4 = {'data_description': 'Sample_root_5', 'node_id': '5', 'parent_id': '3'} | 
|  | 49 | +data5 = {'data_description': 'Sample_root_6', 'node_id': '6', 'parent_id': '4'} | 
|  | 50 | +data6 = {'data_description': 'Sample_root_7', 'node_id': '7', 'parent_id': '4'} | 
|  | 51 | + | 
|  | 52 | +a = Tree(Node(data)) | 
|  | 53 | +a.insert_child(a.Root, Node(data1)) | 
|  | 54 | +a.insert_child(a.Root, Node(data2)) | 
|  | 55 | +a.insert_child(a.Root, Node(data3)) | 
|  | 56 | +a.insert_child(a.Root, Node(data4)) | 
|  | 57 | +a.insert_child(a.Root, Node(data5)) | 
|  | 58 | +a.insert_child(a.Root, Node(data6)) | 
|  | 59 | +a.print_tree(a.Root, "|_") | 
|  | 60 | + | 
|  | 61 | +# |_ 1  Sample_root_1 | 
|  | 62 | +# |__ 2 1 Sample_root_2 | 
|  | 63 | +# |___ 4 2 Sample_root_4 | 
|  | 64 | +# |____ 6 4 Sample_root_6 | 
|  | 65 | +# |____ 7 4 Sample_root_7 | 
|  | 66 | +# |__ 3 1 Sample_root_3 | 
|  | 67 | +# |___ 5 3 Sample_root_5 | 
0 commit comments