1、输入字符序列,建立二叉链表。 2、利用栈,编写非递归算法,编程实现二叉树的中序遍历。 3、求二叉树的叶子结点个数。 4、在主函数中设计一个简单的菜单,分别调试上述算法。程序
时间: 2024-03-18 17:41:05 浏览: 93
二叉树的几种操作,包括递归先序建立二叉树、先序遍历、中序遍历、后序遍历、非递归的各种遍历
5星 · 资源好评率100%
好的,以下是针对这四个问题的程序实现:
```python
# 定义二叉树结点的数据结构
class Node:
def __init__(self, data=None):
self.data = data
self.left = None
self.right = None
# 输入字符序列,建立二叉链表
def buildTree(s):
stack = []
root = None
for c in s:
if c == '(':
stack.append(root)
root = None
elif c == ')':
root = stack.pop()
elif c.isalpha():
node = Node(c)
if root:
if not root.left:
root.left = node
else:
root.right = node
root = node
return root
# 利用栈,编写非递归算法,编程实现二叉树的中序遍历
def inorder(root):
stack = []
node = root
while stack or node:
while node:
stack.append(node)
node = node.left
node = stack.pop()
print(node.data)
node = node.right
# 求二叉树的叶子结点个数
def countLeaves(root):
if not root:
return 0
if not root.left and not root.right:
return 1
return countLeaves(root.left) + countLeaves(root.right)
# 主函数,设计一个简单的菜单,分别调试上述算法
if __name__ == '__main__':
while True:
print('请选择操作:')
print('1. 输入字符序列,建立二叉链表')
print('2. 利用栈,编写非递归算法,编程实现二叉树的中序遍历')
print('3. 求二叉树的叶子结点个数')
print('4. 退出')
choice = input().strip()
if choice == '1':
s = input('请输入字符序列:').strip()
root = buildTree(s)
print('二叉树已建立')
elif choice == '2':
if not root:
print('请先建立二叉树')
else:
print('中序遍历结果:')
inorder(root)
elif choice == '3':
if not root:
print('请先建立二叉树')
else:
print('叶子结点个数:', countLeaves(root))
elif choice == '4':
break
else:
print('输入有误,请重新选择')
```
这里只是一个简单的实现,可能还有一些细节需要根据具体情况进行调整。
阅读全文