实现二叉链类,完成以下功能: 根据括号表示法字符串构造二叉链 由二叉链输出二叉树(括号表示法)
时间: 2023-06-12 17:04:54 浏览: 124
下面是二叉链类的实现,包含了根据括号表示法字符串构造二叉链和由二叉链输出二叉树(括号表示法)的功能:
```python
class BinaryTreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
class BinaryTree:
def __init__(self, s):
self.s = s
self.root = self._build_tree()
def _build_tree(self):
stack = []
i = 0
while i < len(self.s):
if self.s[i] == '(':
i += 1
continue
elif self.s[i] == ')':
i += 1
if stack:
stack.pop()
continue
else:
j = i
while j < len(self.s) and self.s[j] not in ['(', ')']:
j += 1
val = int(self.s[i:j])
node = BinaryTreeNode(val)
if stack:
parent = stack[-1]
if not parent.left:
parent.left = node
else:
parent.right = node
stack.append(node)
i = j
return stack[0]
def _print_tree(self, node):
if not node:
return ''
s = str(node.val)
if node.left or node.right:
s += '(' + self._print_tree(node.left) + ')'
if node.right:
s += '(' + self._print_tree(node.right) + ')'
return s
def __str__(self):
return self._print_tree(self.root)
```
二叉链类的构造函数 `__init__(self, s)` 传入一个括号表示法字符串,利用栈的机制将其转换为二叉链,并返回根节点。其中 `BinaryTreeNode` 是二叉树节点的类。
输出二叉树的 `__str__(self)` 函数采用递归的方式实现,对于每个节点,如果它有左儿子或右儿子,则输出括号和儿子的子树,最后返回字符串表示的二叉树。
下面是一个测试例子:
```python
s = '1(2(4)(5))(3(6()(7)))'
tree = BinaryTree(s)
print(tree) # 输出:1(2(4)(5))(3(6()(7)))
```
这个括号表示法字符串表示的二叉树如下所示:
```
1
/ \
2 3
/ \ / \
4 5 6 7
```
阅读全文