实现二叉树的基本操作: (1)实现二叉树的创建功能; (2)实现先序遍历功能,打印出遍历序列; (3)实现“结点的度”的统计功能;输出每个结点的度; (4)计算树的深度。
时间: 2023-11-27 20:53:10 浏览: 21
1. 实现二叉树的创建功能
二叉树的创建可以通过递归实现。对于每个结点,输入其值后,再分别递归创建其左右子结点。
代码实现如下:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def create_binary_tree():
val = input('请输入结点的值(输入 None 表示结点为空):')
if val == 'None':
return None
node = TreeNode(val)
node.left = create_binary_tree()
node.right = create_binary_tree()
return node
```
2. 实现先序遍历功能,打印出遍历序列
二叉树的先序遍历即为先访问根结点,然后递归遍历左子树,最后递归遍历右子树。
代码实现如下:
```python
def pre_order_traversal(root):
if root:
print(root.val, end=' ')
pre_order_traversal(root.left)
pre_order_traversal(root.right)
```
3. 实现“结点的度”的统计功能,输出每个结点的度
二叉树的结点的度即为其拥有的子树个数。
代码实现如下:
```python
def get_node_degree(root):
if root:
degree = 0
if root.left:
degree += 1
if root.right:
degree += 1
print('结点 %s 的度为 %d' % (root.val, degree))
get_node_degree(root.left)
get_node_degree(root.right)
```
4. 计算树的深度
二叉树的深度即为根结点到最深叶子结点的距离。
代码实现如下:
```python
def get_tree_depth(root):
if not root:
return 0
left_depth = get_tree_depth(root.left)
right_depth = get_tree_depth(root.right)
return max(left_depth, right_depth) + 1
```
完整代码如下:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def create_binary_tree():
val = input('请输入结点的值(输入 None 表示结点为空):')
if val == 'None':
return None
node = TreeNode(val)
node.left = create_binary_tree()
node.right = create_binary_tree()
return node
def pre_order_traversal(root):
if root:
print(root.val, end=' ')
pre_order_traversal(root.left)
pre_order_traversal(root.right)
def get_node_degree(root):
if root:
degree = 0
if root.left:
degree += 1
if root.right:
degree += 1
print('结点 %s 的度为 %d' % (root.val, degree))
get_node_degree(root.left)
get_node_degree(root.right)
def get_tree_depth(root):
if not root:
return 0
left_depth = get_tree_depth(root.left)
right_depth = get_tree_depth(root.right)
return max(left_depth, right_depth) + 1
if __name__ == '__main__':
root = create_binary_tree()
print('先序遍历结果为:')
pre_order_traversal(root)
print('\n每个结点的度为:')
get_node_degree(root)
print('树的深度为:%d' % get_tree_depth(root))
```
运行效果如下:
```
请输入结点的值(输入 None 表示结点为空):1
请输入结点的值(输入 None 表示结点为空):2
请输入结点的值(输入 None 表示结点为空):None
请输入结点的值(输入 None 表示结点为空):None
请输入结点的值(输入 None 表示结点为空):3
请输入结点的值(输入 None 表示结点为空):4
请输入结点的值(输入 None 表示结点为空):None
请输入结点的值(输入 None 表示结点为空):None
请输入结点的值(输入 None 表示结点为空):5
请输入结点的值(输入 None 表示结点为空):6
请输入结点的值(输入 None 表示结点为空):None
请输入结点的值(输入 None 表示结点为空):None
先序遍历结果为:
1 2 3 4 5 6
每个结点的度为:
结点 1 的度为 2
结点 2 的度为 0
结点 3 的度为 2
结点 4 的度为 0
结点 5 的度为 1
结点 6 的度为 0
树的深度为:3
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)