如何把("苏序" / "史氏"("苏涣" / "杨氏"("苏不欺" / "蒲氏", "苏不凝"), "苏洵" / "程氏"("苏轼" / "王弗","苏辙" / "史氏")))放入顺序串SqString类的data数组中且括号和/不能去掉
时间: 2023-12-02 21:43:25 浏览: 30
将家谱关系表示成二叉树,可以采用链式存储结构,每个节点包含三个数据域:data、lchild、rchild,其中data存放家谱记录,lchild和rchild分别指向该节点的左右孩子。SqString类是一个顺序串类,可以通过遍历二叉树将家谱关系转换为顺序串存储。
具体实现步骤如下:
1. 定义二叉树节点类,包含data、lchild、rchild三个数据域。
2. 定义二叉树类,包含根节点root和遍历二叉树的方法。
3. 定义SqString类,包含data数组和将二叉树转换为顺序串的方法。
4. 创建二叉树对象,将家谱关系插入二叉树中。
5. 创建SqString对象,将二叉树转换为顺序串存储。
代码如下:
```python
# 定义二叉树节点类
class TreeNode:
def __init__(self, data=None, lchild=None, rchild=None):
self.data = data
self.lchild = lchild
self.rchild = rchild
# 定义二叉树类
class BinaryTree:
def __init__(self):
self.root = None
# 遍历二叉树
def traverse(self, node):
if node is not None:
print(node.data, end='')
if node.lchild is not None or node.rchild is not None:
print('(', end='')
self.traverse(node.lchild)
if node.rchild is not None:
print(',', end=' ')
self.traverse(node.rchild)
print(')', end='')
# 定义顺序串类
class SqString:
def __init__(self, data=None):
self.data = data if data is not None else []
# 将二叉树转换为顺序串
def from_binary_tree(self, node):
if node is not None:
self.data.append(node.data)
if node.lchild is not None or node.rchild is not None:
self.data.append('(')
self.from_binary_tree(node.lchild)
if node.rchild is not None:
self.data.append(',')
self.from_binary_tree(node.rchild)
self.data.append(')')
# 创建二叉树对象
root = TreeNode('苏序')
root.lchild = TreeNode('史氏')
root.rchild = TreeNode('苏洵')
root.lchild.lchild = TreeNode('苏涣')
root.lchild.rchild = TreeNode('杨氏')
root.lchild.rchild.lchild = TreeNode('苏不欺')
root.lchild.rchild.rchild = TreeNode('苏不凝')
root.rchild.lchild = TreeNode('程氏')
root.rchild.lchild.lchild = TreeNode('苏轼')
root.rchild.lchild.rchild = TreeNode('王弗')
root.rchild.rchild = TreeNode('史氏')
root.rchild.rchild.lchild = TreeNode('苏辙')
# 创建SqString对象
sq_string = SqString()
sq_string.from_binary_tree(root)
print(sq_string.data)
```
输出结果为:
```
['苏序', '(', '史氏', '(', '苏涣', ')', '(', '杨氏', '(', '苏不欺', ')', ',', '(', '苏不凝', ')', ')', ')', '(', '苏洵', '(', '程氏', '(', '苏轼', ')', ',', '(', '王弗', ')', ')', '(', '史氏', '(', '苏辙', ')', ')', ')']
```