使用括号表示法输入二叉树并转化为二叉树的链式存储结构;横向输出二叉树;
时间: 2024-05-11 17:13:11 浏览: 162
JAVA 实现二叉树(链式存储结构)
使用括号表示法输入二叉树的过程如下:
1. 根节点输入括号“()”内,左右子树以同样的方式输入;
2. 如果节点没有左子树,则左括号“()”不能省略;如果节点没有右子树,则右括号“()”不能省略;
3. 节点之间用逗号“,”隔开。
例如:二叉树A(B(D,E),C(,F))的括号表示法如下:A(B(D,E),C(,F))
将括号表示法转化为二叉树的链式存储结构的过程如下:
1. 创建一个二叉树的结构体,包含节点值和左右指针;
2. 读入一个字符,如果是“(”则表示有左子树,递归创建左子树,并将左指针指向它;
3. 读入一个字符,如果是“,”则表示有右子树,递归创建右子树,并将右指针指向它;
4. 读入一个字符,如果是“)”则返回上一层。
横向输出二叉树的过程如下:
1. 先输出右子树;
2. 输出当前节点的值;
3. 输出左子树。
下面是示例代码:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def build_tree(s):
if not s:
return None
val, i = "", 0
while i < len(s) and s[i] not in "(),":
val += s[i]
i += 1
root = TreeNode(int(val))
if i < len(s) and s[i] == '(':
j = i + 1
cnt = 1
while j < len(s) and cnt != 0:
if s[j] == '(':
cnt += 1
elif s[j] == ')':
cnt -= 1
j += 1
root.left = build_tree(s[i+1:j-1])
i = j
if i+1 < len(s) and s[i+1] == '(':
root.right = build_tree(s[i+2:-1])
return root
def print_tree(root, space=0):
if not root:
return
print_tree(root.right, space+4)
print(" " * space + str(root.val))
print_tree(root.left, space+4)
s = "A(B(D,E),C(,F))"
root = build_tree(s)
print_tree(root)
```
阅读全文