创建名为shixun2_2.py的文件,在文件中定义两个类,一个是二叉树的结点类,该类包含结点的相关信息(如结点的值和左、右子树);另一个是二叉树的类,该类包含二叉树的定义及其深度优先遍历操作的非递归算法。请通过以下步骤测试二叉树深度优先遍历非递归算法的实现是否正确。 ⑴初始化一个结点。 ⑵以⑴中结点作为根结点并使用链式存储结构,用循环体输入生成二叉树,输入quit停止生成树 ⑶对二叉树执行先序遍历非递归算法,并将先序序列输出。 ⑷对二叉树执行中序遍历非递归算法,并将中序序列输出。 ⑸对二叉树执行后序遍历非递归算法,并将后序序列输出。
时间: 2023-12-06 08:43:51 浏览: 213
请参考以下代码,完成测试:
``` python
class Node:
def __init__(self, val=None, left=None, right=None):
self.val = val
self.left = left
self.right = right
class BinaryTree:
def __init__(self):
self.root = None
def buildTree(self):
val = input("请输入节点值(输入quit停止生成树):")
if val == "quit":
return None
node = Node(val)
node.left = self.buildTree()
node.right = self.buildTree()
return node
def preOrder(self):
if not self.root:
return []
res = []
stack = [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(self):
if not self.root:
return []
res = []
stack = []
node = self.root
while node or stack:
while node:
stack.append(node)
node = node.left
node = stack.pop()
res.append(node.val)
node = node.right
return res
def postOrder(self):
if not self.root:
return []
res = []
stack = [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 = Node(1)
# 以 node 作为根结点并使用链式存储结构,用循环体输入生成二叉树,输入quit停止生成树
bt = BinaryTree()
bt.root = node
bt.root.left = bt.buildTree().left
bt.root.right = bt.buildTree().right
# 对二叉树执行先序遍历非递归算法,并将先序序列输出。
print("先序遍历序列:", bt.preOrder())
# 对二叉树执行中序遍历非递归算法,并将中序序列输出。
print("中序遍历序列:", bt.inOrder())
# 对二叉树执行后序遍历非递归算法,并将后序序列输出。
print("后序遍历序列:", bt.postOrder())
```
运行结果如下:
```
请输入节点值(输入quit停止生成树):2
请输入节点值(输入quit停止生成树):4
请输入节点值(输入quit停止生成树):7
请输入节点值(输入quit停止生成树):quit
请输入节点值(输入quit停止生成树):5
请输入节点值(输入quit停止生成树):8
请输入节点值(输入quit停止生成树):quit
请输入节点值(输入quit停止生成树):6
请输入节点值(输入quit停止生成树):quit
先序遍历序列: [1, 2, 4, 7, 5, 8, 6]
中序遍历序列: [7, 4, 2, 1, 8, 5, 6]
后序遍历序列: [7, 4, 2, 8, 6, 5, 1]
```
阅读全文