Python

Pythonで学ぶアルゴリズム 乱数でランダムな要素と構造の二分木を作成

二分木を作ってみます。

概要

二分木(二進木、バイナリツリー、英: binary tree)は、データ構造の1つである。根付き木構造の中で、あるノード(節点 node)が持つ子の数が高々2であるものをいう。典型的には2つの子はそれぞれ「左」「右」と呼ばれる。

たとえば、二分探索や二分ヒープを実装するために使われる。

二分木 – Wikipedia

サンプルコード

import random


def get_last_child(parent_node, node):

    if random.randint(0, 1) == 0:
        if parent_node.left is None:
            parent_node.left = node
        else:
            get_last_child(parent_node.left, node)
    else:
        if parent_node.right is None:
            parent_node.right = node
        else:
            get_last_child(parent_node.right, node)


def create_tree(element_size):

    class Node(object):
        def __init__(self, value, left=None, right=None):
            self.value = value
            self.left = left
            self.right = right

    root_node = Node(0)
    parent_node = root_node
    node_list = [root_node]

    for i in range(1, element_size):
        node = Node(i)

        get_last_child(parent_node, node)

        node_list.append(node)

        parent_node = node_list[random.randint(0, len(node_list)-1)]

    return root_node

tree = create_tree(40)

生成した二分木を表示する方法。