Алгоритмы бинарного дерева

#java #binary-tree

#java #двоичное дерево

Вопрос:

Я столкнулся со следующим алгоритмом, который вставляет пять узлов в двоичное дерево, а затем обходит дерево.

Какая древовидная структура создается? Это сбалансировано или несбалансировано? Как вы можете сказать? Повлияет ли это на тип обхода, который выполняет алгоритм?

 import Prog1Tools.IOTools;

class Node {
    Node left;
    Node right;
    int value;

    public Node(int value) {
        this.value = value;
    }
}

public class GeneralTreeTest {
    public static void main(String[] args) {

        // build a simple tree add 5 nodes to the tree
        Node root = new Node(5);
        System.out.println("Tree Example");
        System.out.println("Building tree with root value "   root.value);
        insert(root, 1);
        insert(root, 8);
        insert(root, 6);
        insert(root, 3);
        insert(root, 9);
        System.out.println("Traversing tree ");
        printOrder(root);

    }

    public static void insert(Node node, int value) {
        if (value < node.value) {
            if (node.left != null) {
                insert(node.left, value);
            } else {
                System.out.println(" Inserted "   value   " to left of "
                      node.value);
                node.left = new Node(value);
            }
        } else if (value > node.value) {
            if (node.right != null) {
                insert(node.right, value);
            } else {
                System.out.println(" Inserted "   value   " to right of "
                      node.value);
                node.right = new Node(value);
            }
        }
    }

    public static void printOrder(Node node) {
        if (node != null) {
            printOrder(node.left);
            System.out.println(" Traversed "   node.value);
            printOrder(node.right);
        }
    }
}
  

Комментарии:

1. Кажется несбалансированным. Должно быть легко найти определение сбалансированного двоичного дерева и нарисовать созданное вами

Ответ №1:

Это сбалансированный или несбалансированный?

У вас нет никакой логики балансировки. Например, вы вставляете 1,2, 3, тогда все узлы будут продолжаться вправо. Например, в сбалансированном дереве AVL 1 будет «поворачиваться влево», а 2 станет корнем, что приведет к балансировке дерева.

как вы можете определить, является ли это одним или другим

Вы могли бы извлечь указатели на структуры данных узла в вашем дереве.

повлияет ли это на тип обхода, который выполняет алгоритм.

Не должен. В настоящее время вы печатаете влево, затем корень вправо. Тот же порядок будет применяться к любому типу двоичного дерева