对树型数据结构来说很新。我有两个变量rules
和operators
。每一个都是一个字符串列表。例如:
op = ['&',"|","&"]
rules = ['a','b','c','d']
len(op)
必须始终等于len(rules)-1
,因为op
总是连接规则或其他op
。所以在上面,一个可能的树是:
"|"
/ \
"&" "&"
| \ | \
"a" "b" "c" "d"
另一种可能是
"&"
/ \
"|" "d"
/ \
"&" "c"
| \
"a" "b"
无效树:
"c"
| \
"|" "d"
上面的树无效,因为上面的另一个运算符不能是规则。
现在,随着规则和运算符数量的增加,树的组合将是无止境的我的问题是是否可以随机生成上述树?这有算法吗?更具体地说,如果您知道节点和叶必须是什么,是否有方法随机创建二叉树?
谢谢
最佳答案
我能想到:
1-洗牌你的规则:例如['a','b','c','d']
>['c','a','b','d']
(或者如果你有重复和“丢失”的规则,只需随机选择一个如['c','d','b','b','d']
所需的长度)
2-将列表中的每个规则都设为“单例”树(即仅为一片叶子),例如'a'
>Tree('a', None, None)
3-在i
中选择一个随机索引range(len(rules)-1)
4-从oper
中选择一个随机运算符op
(这里也是一样的,要么洗牌op
然后从列表中逐个获取元素,要么每次都单独选择一个随机运算符,具体取决于您想要什么…)
5-将rules[i:i+2]
处的2个元素替换为新的单个元素Tree(oper, rules[i], rules[i+1])
6-重复步骤3,直到len(rules) == 1
7-你现在有一个随机树
关于python - 创建给定组件节点和运算符的树,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53474522/