建立二叉树,然后实现:输出先序逼历、中序遍历、后序遍历的结果。 输入说明 第一行:结点个数n。 以下行:每行3个数,第一个是父亲,后两个依次为左右孩子,0表示空。 输出说明 根、先中后序遍历结果。
时间: 2024-11-13 13:27:55 浏览: 38
建立二叉树并实现三种遍历算法的过程可以分为以下几个步骤:
1. **输入处理**:
- 首先读取输入,包括节点个数 `n`,以及接下来 `n` 行,每行代表一个节点,其中包含父节点编号、左子节点编号和右子节点编号。
2. **二叉树构建**:
- 使用递归的方式创建二叉树,如果节点编号为 0,则表示这是一个空节点(null);否则,创建一个新节点,并将其作为父节点的子节点添加到树中。
3. **遍历算法实现**:
- **先序遍历**(Preorder Traversal):从根节点开始,先访问当前节点,然后遍历左子树,最后遍历右子树。
- **中序遍历**(Inorder Traversal):先遍历左子树,然后访问当前节点,最后遍历右子树。
- **后序遍历**(Postorder Traversal):先遍历左子树,然后遍历右子树,最后访问当前节点。
4. **输出结果**:
- 输出根节点,然后分别输出三种遍历方式得到的序列。为了清晰展示,可以将每个遍历结果换行分隔。
5. **伪代码示例**:
```python
def build_tree(n):
# 根据输入构建二叉树
nodes = [list(map(int, input().split())) for _ in range(n)]
return build_helper(nodes, 0)
def build_helper(nodes, node_id):
if not nodes[node_id]:
return None
root = Node(nodes[node_id][0])
root.left = build_helper(nodes, nodes[node_id][1])
root.right = build_helper(nodes, nodes[node_id][2])
return root
def preorder_traversal(root):
# 先序遍历
result = []
stack = [root]
while stack:
node = stack.pop()
result.append(node.val)
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
return result
def inorder_traversal(root):
# 中序遍历
result = []
stack = []
current = root
while True:
while current:
stack.append(current)
current = current.left
if not stack:
break
current = stack.pop()
result.append(current.val)
current = current.right
return result
def postorder_traversal(root):
# 后序遍历
result = []
stack = [root]
visited = set()
while stack:
node = stack[-1]
if node not in visited:
visited.add(node)
stack.append(node.left) # 避免重复访问
stack.append(node.right)
else:
result.append(node.val)
stack.pop() # 当前节点已访问完,移除
return result
n = int(input())
root = build_tree(n)
print("Root:", root.val)
print("Preorder traversal:", preorder_traversal(root))
print("Inorder traversal:", inorder_traversal(root))
print("Postorder traversal:", postorder_traversal(root))
阅读全文