完成二叉树的建立与层次遍历,具体要求包括: (1)采用链式存储结构建立二叉树。 (2)采用非递归算法实现二叉树的层次遍历。 【输入形式】按照先序输入二叉树中结点的值,字符*表示空树,每个字符之间用空格隔开
时间: 2024-10-21 12:02:23 浏览: 28
数据结构试验3二叉树建立,遍历等
在使用链式存储结构建立二叉树时,我们可以定义一个简单的二叉节点类,包含两个指针,一个指向左孩子,另一个指向右孩子。首先,我们需要创建一个函数来处理输入并构造二叉树:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def build_binary_tree(in_str):
if not in_str or in_str[0] == '*':
return None
root_val = int(in_str[0])
root = TreeNode(root_val)
queue = [root]
i = 1
while queue and i < len(in_str):
current_node = queue.pop(0)
if in_str[i] != '*':
current_node.left = TreeNode(int(in_str[i]))
queue.append(current_node.left)
i += 1
if i < len(in_str) and in_str[i] != '*':
current_node.right = TreeNode(int(in_str[i]))
queue.append(current_node.right)
i += 1
return root
```
接下来,我们实现非递归的层次遍历算法,通常使用队列来辅助。层次遍历会按照从上到下、从左到右的顺序访问每一个节点:
```python
from collections import deque
def level_order_traversal(root):
if not root:
return []
result = []
queue = deque([root])
while queue:
level_size = len(queue)
current_level = []
for _ in range(level_size):
node = queue.popleft()
current_level.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
result.append(current_level)
return result
```
【相关问题】:
1. 链式存储结构的二叉树如何区分左右子节点?
2. 层次遍历和前序遍历的区别是什么?
3. 如果输入的字符串为空,上述代码会返回什么结果?
阅读全文