我想根据Python的字符串字典顺序将给定的字符串转换为树,作为顺序字符串,其中每个单词将与下一个单词(根不包括)进行比较。也就是说,如果比较w,则在节点[lefttree,righttree,word]的左子树中插入或搜索单词w
strings will be like this :
string = "sad adsa dqwe fdsf erwa"
到目前为止我没有做任何事情,但我有一个想法,即通过拆分给定的字符串 string.split ,将第一个单词指定为根,并且对于下一个单词,递归检查条件返回True。
答案 0 :(得分:1)
如果我准确理解你的目标,你所需要的只是字符串的二进制搜索树(BST)。
树的每个# Works in Jupyter with Python 2 Kernel.
%matplotlib inline
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
# Borrowed from http://stackoverflow.com/a/31385996/4099925
def hexbin(x, y, color, max_series=None, min_series=None, **kwargs):
cmap = sns.light_palette(color, as_cmap=True)
ax = plt.gca()
xmin, xmax = min_series[x.name], max_series[x.name]
ymin, ymax = min_series[y.name], max_series[y.name]
plt.hexbin(x, y, gridsize=15, cmap=cmap, extent=[xmin, xmax, ymin, ymax], **kwargs)
g = sns.PairGrid(tips, hue='sex')
g.map_diag(plt.hist)
g.map_lower(plt.scatter, alpha=0.5)
g.map_upper(hexbin, min_series=tips.min(), max_series=tips.max(), alpha=0.5)
都是以下格式的列表列表:Node
。空列表将表示空指针
让我们实现简单的递归过程,根据字典顺序插入新值(这是Python中字符串的默认比较顺序)。
[left_sub_tree, right_sub_tree, word]
现在,您可以为您的字符串创建一个BST:
def insert(x, word):
if len(x) == 0:
return [[], [], word]
if word < x[2]:
x[0] = insert(x[0], word)
elif x[2] < word:
x[1] = insert(x[1], word)
return x
查看结构的最简单方法是按级别打印树级别:
tree = []
for w in string.split():
tree = insert(tree, w)
FYI。上述过程执行所谓的“有序”遍历。