3.用二叉链表作为存储结构,建立一棵二叉树。分别按先序、中序、后序和层次顺序遍历二叉树。按中序顺序非递归遍历二叉树 编写交换二叉树中所有结点的左、右孩子的非递归算法。请给出代码示例
时间: 2024-12-14 13:14:37 浏览: 44
构建一个二叉链表表示的二叉树并进行遍历,首先需要定义二叉链表节点(Node)类。以下是部分代码示例:
```python
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
# 建立二叉树
def build_bst_in_order(root, arr):
if not arr:
return None
root = Node(arr.pop(0))
root.left = build_bst_in_order(root.left, arr)
root.right = build_bst_in_order(root.right, arr)
return root
# 先序遍历
def preorder_traversal(node):
if node is not None:
print(node.data, end=" ")
preorder_traversal(node.left)
preorder_traversal(node.right)
# 中序遍历
def inorder_traversal(node):
if node is not None:
inorder_traversal(node.left)
print(node.data, end=" ")
inorder_traversal(node.right)
# 后序遍历
def postorder_traversal(node):
if node is not None:
postorder_traversal(node.left)
postorder_traversal(node.right)
print(node.data, end=" ")
# 层次遍历 (广度优先搜索)
from collections import deque
def level_order_traversal(node):
if node is None:
return
queue = deque([node])
while queue:
curr_node = queue.popleft()
print(curr_node.data, end=" ")
if curr_node.left:
queue.append(curr_node.left)
if curr_node.right:
queue.append(curr_node.right)
# 非递归中序遍历 (线索二叉树)
def in_order_dfs_iterative(node):
stack = []
current = node
while True:
# 当前节点为空或者栈未空
while current:
stack.append(current)
current = current.left
if not stack:
break
current = stack.pop()
print(current.data, end=" ")
current = current.right
# 交换左、右孩子的非递归算法
def swap_children(node):
if node is not None:
temp = node.left
node.left = node.right
node.right = temp
swap_children(node.left)
swap_children(node.right)
```
以上代码展示了如何创建二叉树、各种遍历方法以及交换节点孩子操作。请注意,为了完整地运行这些代码,你需要在适当的地方初始化根节点,并传入适当的数组`arr`来构建二叉树。同时,二叉链表中的节点数据可以替换为你需要的数据类型。
阅读全文
相关推荐

















