我想使用Python将二叉树转换为数组,并且我不知道如何给树节点提供索引?
我已经使用公式完成了 left_son =(2 * p)+1; 和right_son =(2 * p)+2;在Java中,但我陷在python中。有什么功能可以给python中的树节点索引吗?
答案 0 :(得分:0)
如果是二叉树,则必须执行级别顺序遍历。而且,当您继续遍历时,必须将值按遍历期间出现的顺序存储在数组中。这将帮助您恢复二叉树的属性,并保持元素的顺序。这是执行级别顺序遍历的代码。
class Node:
# A utility function to create a new node
def __init__(self, key):
self.data = key
self.left = None
self.right = None
# Function to print level order traversal of tree
def printLevelOrder(root):
h = height(root)
for i in range(1, h+1):
printGivenLevel(root, i)
# Print nodes at a given level
def printGivenLevel(root , level):
if root is None:
return
if level == 1:
print "%d" %(root.data),
elif level > 1 :
printGivenLevel(root.left , level-1)
printGivenLevel(root.right , level-1)
""" Compute the height of a tree--the number of nodes
along the longest path from the root node down to
the farthest leaf node
"""
def height(node):
if node is None:
return 0
else :
# Compute the height of each subtree
lheight = height(node.left)
rheight = height(node.right)
#Use the larger one
if lheight > rheight :
return lheight+1
else:
return rheight+1
# Driver program to test above function
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
print "Level order traversal of binary tree is -"
printLevelOrder(root)
答案 1 :(得分:0)
您可以以完全相同的方式在python中将一棵二叉树表示为一维列表。
例如,如果您在树上的表示为:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15]
0
是根
1
和2
是下一个级别
1
和2
的子代分别是[3, 4]
和[5, 6]
这与您的公式相对应。对于索引为i
的给定节点,该节点的子节点为(2*i)+1
(2*i)+2
。这是建模堆的常用方法。您可以在[heapq库]中了解有关Python如何使用它的更多信息。(https://docs.python.org/3.0/library/heapq.html)
您可以使用此工具通过以下方式深入遍历树:
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15]
def childNodes(i):
return (2*i)+1, (2*i)+2
def traversed(a, i=0, d = 0):
if i >= len(a):
return
l, r = childNodes(i)
traversed(a, r, d = d+1)
print(" "*d + str(a[i]))
traversed(a, l, d = d+1)
traversed(a)
此照片
15
6
14
2
13
5
11
0
10
4
9
1
8
3
7