<｜begin▁of▁sentence｜>### Instruction:
Given two full balanced binary trees of height 2, can you create a new tree by joining these two trees at a new root node, ensuring that each node's original label is preserved in the 'original_label' attribute of the new tree?
### Response:
import networkx as nx

# Create two full balanced binary trees of height 2
left_tree = nx.balanced_tree(2, 2)
right_tree = nx.balanced_tree(2, 2)

# Define the root nodes for each tree
left_root = list(left_tree.nodes)[0]
right_root = list(right_tree.nodes)[0]

# Join the two trees into a new tree
joined_tree = nx.join_trees([(left_tree, left_root), (right_tree, right_root)], label_attribute='original_label')

# Output some information about the joined tree
print('Number of nodes in joined tree:', joined_tree.number_of_nodes())
print('Is the joined structure a tree?', nx.is_tree(joined_tree))
print('Root node:', list(joined_tree.nodes)[0])

# Display the original label attribute of a non-root node
non_root_node = next(node for node in joined_tree.nodes() if joined_tree.degree[node] == 1 and node != 0)
print('Original label of non-root leaf node:', joined_tree.nodes[non_root_node]['original_label'])
<|EOT|>
