二叉树基本操作演示程序 设计一个与二叉树基本操作相关的演示程序。 要求: (1)创建二叉树。按照用户需要的二叉树,构建二叉树。 (2)分别以先序、中序、后序三种遍历访问二叉树。 (3)输出二叉树的叶子结点及叶子结点的个数。 (4)输出二叉树的高度
时间: 2023-11-14 07:16:47 浏览: 84
以下是一个简单的二叉树基本操作演示程序的代码,使用了递归实现二叉树的各种操作:
```python
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
class BinaryTree:
def __init__(self):
self.root = None
def create(self, value):
if self.root is None:
self.root = Node(value)
else:
self._create(value, self.root)
def _create(self, value, current_node):
if value < current_node.value:
if current_node.left is None:
current_node.left = Node(value)
else:
self._create(value, current_node.left)
elif value > current_node.value:
if current_node.right is None:
current_node.right = Node(value)
else:
self._create(value, current_node.right)
def preorder(self):
if self.root is not None:
self._preorder(self.root)
def _preorder(self, current_node):
if current_node is not None:
print(current_node.value)
self._preorder(current_node.left)
self._preorder(current_node.right)
def inorder(self):
if self.root is not None:
self._inorder(self.root)
def _inorder(self, current_node):
if current_node is not None:
self._inorder(current_node.left)
print(current_node.value)
self._inorder(current_node.right)
def postorder(self):
if self.root is not None:
self._postorder(self.root)
def _postorder(self, current_node):
if current_node is not None:
self._postorder(current_node.left)
self._postorder(current_node.right)
print(current_node.value)
def count_leaves(self):
return self._count_leaves(self.root)
def _count_leaves(self, current_node):
if current_node is None:
return 0
if current_node.left is None and current_node.right is None:
return 1
return self._count_leaves(current_node.left) + self._count_leaves(current_node.right)
def height(self):
return self._height(self.root)
def _height(self, current_node):
if current_node is None:
return 0
left_height = self._height(current_node.left)
right_height = self._height(current_node.right)
return max(left_height, right_height) + 1
```
这个程序包含了创建二叉树、先序遍历、中序遍历、后序遍历、计算叶子结点个数和计算二叉树高度等基本操作。以下是一个示例,演示如何使用该程序创建一个二叉树,并输出其各种遍历方式、叶子结点个数和高度:
```python
tree = BinaryTree()
tree.create(5)
tree.create(3)
tree.create(7)
tree.create(2)
tree.create(4)
tree.create(6)
tree.create(8)
print("Preorder traversal:")
tree.preorder()
print("Inorder traversal:")
tree.inorder()
print("Postorder traversal:")
tree.postorder()
print("Number of leaves:", tree.count_leaves())
print("Height of the tree:", tree.height())
```
这个示例创建了一个包含7个结点的二叉树,并分别使用先序、中序、后序遍历方式输出了其所有结点的值。接着,程序计算了该二叉树的叶子结点个数和高度,并输出了结果。
阅读全文
相关推荐













