我正在遍历非二叉树,我有一个函数来计算节点的高度和子节点数。我想要做的是先按高度对节点的子节点进行排序,并在每个高度组内部按照子节点数对其进行排序
例如:
a
/ \
b c
/|\ /
d e f g
/
h
所以当我遍历树时:
def orderTree(node):
if "children" in node:
if node['children']:
node['children'].sort(key=findHeight)
node['children'].sort(key=countChildren)
for child in node['children']:
print(child['name'])
orderTree(child)
使用此代码我去=> A,C,G,H,B,d,E,F 但我需要的是=> A,B,d,E,F,C,G,H
任何想法如何在python列表中对已排序的项目组进行排序?
答案 0 :(得分:0)
您所追求的树遍历类型称为预订。在不了解完整结构的情况下很难理解您的代码。但看起来你先是从根节点看孩子然后再往下走。
我认为您想打开第一个子节点,然后继续遍历。对于预订,它应该是类似的。
echo $_POST['module_title'];
var_dump($_FILES['file']);
var_dump($_FILES['file1'])
$filename = $_FILES['file']['name'];
move_uploaded_file($_FILES['file']['tmp_name'],'uploads/'.$filename);
这是一个很好的参考 http://www.geeksforgeeks.org/tree-traversals-inorder-preorder-and-postorder/
答案 1 :(得分:0)
您想要做的是“多字段排序”,
要按节点高度排序节点列表,然后按子节点数量排序,只需将sort
以下函数作为key
:
lambda x : (findHeight(x), children(x))
这只返回(height,children)元组。然后sort
使用此元组来比较两个节点。
代码:
def orderTree(node):
# I combined the two ifs
if "children" in node and node['children']:
node['children'].sort(key= lambda x : (findHeight(x), children(x) ) )
for child in node['children']:
print(child['name'])
orderTree(child)
让我说我有
A = (a,b)
和B = (x, y)
这两个元组将如下进行比较:
def compare_tuple(A, B):
if A[0] != B[0]: return A[0] < B[0]
else: return A[1] < B[1]