Рекурсивный обход дерева в глубину на JAVA (postOrder)

205
13 февраля 2018, 07:40

У меня есть файл relations.json, в котором отражена структура {id, node, parent, level}, где:

  • node - номер элемента
  • parent - номер элемента родительского узла
  • level - уровень отношения родительского узла к дочернему

Проблема: я прочитал достаточно много источников на обход дерева в глубину и везде приводятся примеры с node.left и node.right, то есть везде подразумевается, что у родителя всегда максимум 2-а дочерних узла. Такой вариант мне крайне не подходит потому, что у меня число дочерних нод для каждого узла может варьироваться. Я же застрял в попытках описать внутри рекурсии создание новых дочерних элементов.

Вопрос: как написать рекурсивный метод, в котором можно создавать новые дочерние объекты?

Код:

package Tree;
import com.google.gson.Gson;
import POJO.Relations;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
class Node
{
long id;
long node;
long parent;
long level;
Node left, right;
Node child;
public Node(long id, long node, long parent, long level) {
    this.id = id;
    this.node = node;
    this.parent = parent;
    this.level = level;
    left = right = null;
}
}
class BinaryTree
{
    // Root of Binary Tree
Node root;
BinaryTree()
{
    root = null;
}
void printPostorder(Node node)
{
    if (node == null)
        return;
    // first recur on left subtree
    printPostorder(node.left);
    // then recur on right subtree
    printPostorder(node.right);
    printPostorder(node.child);
    // now deal with the node
    System.out.print(node.id + " ");
}
void printPostorder()  {     printPostorder(root);  }
public static void main(String[] args) {
    BinaryTree tree = new BinaryTree();
    tree.root = new Node(0, 0, 0, 0);
    tree.root.left = new Node(1, 1, 71, 1);
    tree.root.right = new Node(80, 12, 71, 1);
    Gson gson = new Gson();
    BufferedReader br_relations = null;
    try {
        br_relations = new BufferedReader(new FileReader("files/relations.json"));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    Relations[] relations = gson.fromJson(br_relations, Relations[].class);
    for (Relations r : relations) {
        tree.root.child = new Node(r.getId(),r.getNode(),r.getParent(),r.getLevel());
    }
    System.out.println("\nPostorder traversal of binary tree is ");
    tree.printPostorder();
    }
}
READ ALSO
Websocket задержка пересылки пакетов

Websocket задержка пересылки пакетов

Приветствую! Между клиентом и сервером через WebSocket как в синхронном, так и асинхронном режиме периодически возникает задержка пересылки...

189
pressed focused next button

pressed focused next button

В приложении на Android использую 10 кнопок и фокус при нажатии на кнопку

138
На чем собрать web проект Java? [требует правки]

На чем собрать web проект Java? [требует правки]

Добрый деньНа носу веб проект

172
Сравнение всех полей двух классов

Сравнение всех полей двух классов

У меня в классе куча полей и каждый раз писать такого рода проверки кажется мне не правильным, вот:

160