创建名为shixun2_2.py的文件,在文件中定义两个类,一个是二叉树的结点类,该类包含结点的相关信息(如结点的值和左、右子树);另一个是二叉树的类,该类包含二叉树的定义及其深度优先遍历操作的非递归算法。请通过以下步骤测试二叉树深度优先遍历非递归算法的实现是否正确。 ⑴初始化一个结点。 ⑵以⑴中结点作为根结点并使用链式存储结构,递归创建一棵如图2-2所示的二叉树。 ⑶对二叉树执行先序遍历非递归算法,并将先序序列输出。 ⑷对二叉树执行中序遍历非递归算法,并将中序序列输出。 ⑸对二叉树执行后序遍历非递归算法,并将后序序列输出。
时间: 2023-12-03 19:44:28 浏览: 87
gitee练习项目-中等:2022-7-2
请参考以下代码:
```python
# 定义二叉树结点类
class TreeNode:
def __init__(self, val=None, left=None, right=None):
self.val = val
self.left = left
self.right = right
# 定义二叉树类
class BinaryTree:
def __init__(self, root=None):
self.root = root
# 递归创建二叉树
def create(self, val_list):
if not val_list:
return None
val = val_list.pop(0)
if val is None:
return None
node = TreeNode(val)
node.left = self.create(val_list)
node.right = self.create(val_list)
return node
# 非递归先序遍历
def preorder_traversal(self):
if not self.root:
return []
stack, res = [self.root], []
while stack:
node = stack.pop()
res.append(node.val)
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
return res
# 非递归中序遍历
def inorder_traversal(self):
if not self.root:
return []
stack, res = [], []
curr = self.root
while stack or curr:
while curr:
stack.append(curr)
curr = curr.left
node = stack.pop()
res.append(node.val)
curr = node.right
return res
# 非递归后序遍历
def postorder_traversal(self):
if not self.root:
return []
stack, res = [self.root], []
while stack:
node = stack.pop()
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
res.append(node.val)
return res[::-1]
# 测试
if __name__ == '__main__':
# 初始化结点
node = TreeNode(1, TreeNode(2, TreeNode(4), TreeNode(5)), TreeNode(3, TreeNode(6), TreeNode(7)))
# 创建二叉树
binary_tree = BinaryTree(node)
# 先序遍历
print('先序遍历:', binary_tree.preorder_traversal())
# 中序遍历
print('中序遍历:', binary_tree.inorder_traversal())
# 后序遍历
print('后序遍历:', binary_tree.postorder_traversal())
```
输出结果:
```
先序遍历: [1, 2, 4, 5, 3, 6, 7]
中序遍历: [4, 2, 5, 1, 6, 3, 7]
后序遍历: [4, 5, 2, 6, 7, 3, 1]
```
阅读全文