用python语言定义一个包含结点相关信息的二叉树结点类和一个包含二叉树定义及其基本操作的二叉树的类
时间: 2023-06-24 11:08:41 浏览: 51
下面是一个示例代码:
```python
class BinaryTreeNode:
def __init__(self, value=None, left=None, right=None):
self.value = value
self.left = left
self.right = right
class BinaryTree:
def __init__(self, root=None):
self.root = root
def is_empty(self):
return self.root is None
def insert(self, value):
if self.is_empty():
self.root = BinaryTreeNode(value)
return
queue = [self.root]
while queue:
node = queue.pop(0)
if node.left is None:
node.left = BinaryTreeNode(value)
return
elif node.right is None:
node.right = BinaryTreeNode(value)
return
else:
queue.append(node.left)
queue.append(node.right)
def search(self, value):
if self.is_empty():
return False
queue = [self.root]
while queue:
node = queue.pop(0)
if node.value == value:
return True
if node.left is not None:
queue.append(node.left)
if node.right is not None:
queue.append(node.right)
return False
def preorder_traversal(self, node=None):
if node is None:
node = self.root
if node is not None:
print(node.value, end=' ')
self.preorder_traversal(node.left)
self.preorder_traversal(node.right)
def inorder_traversal(self, node=None):
if node is None:
node = self.root
if node is not None:
self.inorder_traversal(node.left)
print(node.value, end=' ')
self.inorder_traversal(node.right)
def postorder_traversal(self, node=None):
if node is None:
node = self.root
if node is not None:
self.postorder_traversal(node.left)
self.postorder_traversal(node.right)
print(node.value, end=' ')
```
在这个示例中,`BinaryTreeNode` 类表示二叉树中的一个结点,包含值、左子节点和右子节点三个基本属性。`BinaryTree` 类表示二叉树本身,包含根节点和对二叉树进行操作的一些方法,比如插入节点、搜索节点、前序/中序/后序遍历等。这个示例中还包含了一个 `is_empty` 方法,用于判断二叉树是否为空。其中,`insert` 方法使用广度优先搜索的方法在最后一层插入新的节点;`search` 方法也使用了广度优先搜索的方法,在整个二叉树中搜索一个特定值的节点;`preorder_traversal`、`inorder_traversal` 和 `postorder_traversal` 分别表示前序、中序和后序遍历方法。
以上仅为示例代码,具体实现还需要根据实际需要进行调整和优化。