📅  最后修改于: 2023-12-03 15:36:03.361000             🧑  作者: Mango
二叉树是一种非常常见的数据结构,它由根节点、左子树和右子树组成。在二叉树中,每个节点都有一个唯一的父节点,除根节点外,每个节点都有一个唯一的左子节点和右子节点。二叉树可以用递归的方式来定义,如下:
class TreeNode:
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
def create_tree(preorder, inorder):
if not preorder or not inorder:
return None
root_value = preorder[0]
root_index = inorder.index(root_value)
left_inorder = inorder[:root_index]
right_inorder = inorder[root_index+1:]
left_preorder = preorder[1:len(left_inorder)+1]
right_preorder = preorder[len(left_inorder)+1:]
left = create_tree(left_preorder, left_inorder)
right = create_tree(right_preorder, right_inorder)
root = TreeNode(root_value, left, right)
return root
其中,create_tree
函数接受两个列表,一个是二叉树的前序遍历结果,另一个是二叉树的中序遍历结果。通过递归的方式,可以构建出一颗完整的二叉树。
现在,我们需要求出二叉树中第 K 层所有节点值的和。可以通过递归的方式来实现,如下:
def sum_of_k_level(root, k):
if not root:
return 0
if k == 1:
return root.data
return sum_of_k_level(root.left, k-1) + sum_of_k_level(root.right, k-1)
其中,sum_of_k_level
函数接收两个参数,一个是根节点,另一个是要求的层数 K。如果根节点为空,返回 0;如果 K 等于 1,返回根节点的值;否则递归求出左右子树第 K-1 层的节点值的和,最终返回两个和的和。这个函数的时间复杂度为 O(n),其中 n 是二叉树节点的个数。
Markdown 格式的代码片段:
# 二叉树中第 K 层所有节点的总和
二叉树是一种非常常见的数据结构,它由根节点、左子树和右子树组成。在二叉树中,每个节点都有一个唯一的父节点,除根节点外,每个节点都有一个唯一的左子节点和右子节点。二叉树可以用递归的方式来定义,如下:
```python
class TreeNode:
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
def create_tree(preorder, inorder):
if not preorder or not inorder:
return None
root_value = preorder[0]
root_index = inorder.index(root_value)
left_inorder = inorder[:root_index]
right_inorder = inorder[root_index+1:]
left_preorder = preorder[1:len(left_inorder)+1]
right_preorder = preorder[len(left_inorder)+1:]
left = create_tree(left_preorder, left_inorder)
right = create_tree(right_preorder, right_inorder)
root = TreeNode(root_value, left, right)
return root
其中,create_tree
函数接受两个列表,一个是二叉树的前序遍历结果,另一个是二叉树的中序遍历结果。通过递归的方式,可以构建出一颗完整的二叉树。
现在,我们需要求出二叉树中第 K 层所有节点值的和。可以通过递归的方式来实现,如下:
def sum_of_k_level(root, k):
if not root:
return 0
if k == 1:
return root.data
return sum_of_k_level(root.left, k-1) + sum_of_k_level(root.right, k-1)
其中,sum_of_k_level
函数接收两个参数,一个是根节点,另一个是要求的层数 K。如果根节点为空,返回 0;如果 K 等于 1,返回根节点的值;否则递归求出左右子树第 K-1 层的节点值的和,最终返回两个和的和。这个函数的时间复杂度为 O(n),其中 n 是二叉树节点的个数。