.二叉树的基本操作算法实现 (1)利用二叉树字符串“A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建二叉树的二叉链式存储结构; (2)输出该二叉树; (3)输出‘H’节
时间: 2024-12-23 10:12:10 浏览: 6
首先,让我们通过给定的字符串来创建二叉树的二叉链表表示。在这个例子中,每个字符代表一个节点,圆括号用于分隔左子树和右子树,空格分隔节点值。
(1)创建二叉树的过程:
- 根节点A有一个左子树B和一个右子树C;
- B有左右两个子树D、E,其中E还有一个左子树H;
- H有两个子树J、K,K又有左子树L和右子树M,M还有左子树N;
- C也有左子树F和右子树G,G没有子树,I是一个单独的节点。
我们可以用递归的方式来构建这个二叉链表:
```python
class TreeNode:
def __init__(self, val=None, left=None, right=None):
self.val = val
self.left = left
self.right = right
def build_tree(s: str) -> TreeNode:
def helper(start, end):
if start > end:
return None
root_val = s[start]
mid = start + s[start+1:end].find(',')
root = TreeNode(root_val)
root.left = helper(start + 2, mid - 1)
root.right = helper(mid + 2, end - 1)
return root
return helper(0, len(s) - 1)
# 使用上述函数将字符串转换成二叉树
tree = build_tree("A(B(D,E(H(J,K(L,M(,N)))),C(F,G(,I)))")
```
(2)输出整个二叉树可以遍历每个节点并打印其值。这里假设我们有一个`print_node`函数来辅助:
```python
def print_node(node, level=0):
if node is not None:
print(' ' * level + str(node.val))
print_node(node.left, level + 4)
print_node(node.right, level + 4)
print_node(tree)
```
(3)输出节点'H',由于'E'节点的右子树是'H',我们可以从根节点开始查找:
```python
def find_node(node, target):
if node is None or node.val == target:
return node
return find_node(node.left, target) or find_node(node.right, target)
h_node = find_node(tree, 'H')
if h_node:
print(f'"H"的值为: {h_node.val}')
else:
print('未找到"H"节点')
```
阅读全文