Closed1

完全二分木をXMLで表示するやつ

黒ヰ樹黒ヰ樹
import xml.etree.ElementTree as ET


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


def cbt(n):
    if n <= 0:
        return None
    nodes = [Node(i) for i in range(1, n + 1)]
    for i in range(n):
        left_index = 2 * i + 1
        right_index = 2 * i + 2
        if left_index < n:
            nodes[i].left = nodes[left_index]
        if right_index < n:
            nodes[i].right = nodes[right_index]
    return nodes[0]


def node_to_xml(node):
    if node is None:
        return None
    element = ET.Element("node", value=str(node.value))
    if node.left:
        left_element = node_to_xml(node.left)
        if left_element is not None:
            element.append(left_element)
    if node.right:
        right_element = node_to_xml(node.right)
        if right_element is not None:
            element.append(right_element)
    return element


root = node_to_xml(cbt(7))
if root is not None:
    ET.indent(ET.ElementTree(root), space="  ")
    print(ET.tostring(root, encoding="utf-8").decode("utf-8"))
<node value="1">
  <node value="2">
    <node value="4" />
    <node value="5" />
  </node>
  <node value="3">
    <node value="6" />
    <node value="7" />
  </node>
</node>
このスクラップは3ヶ月前にクローズされました