📌  相关文章
📜  二叉树中第 K 层所有节点的总和(1)

📅  最后修改于: 2023-12-03 15:36:03.361000             🧑  作者: Mango

二叉树中第 K 层所有节点的总和

二叉树是一种非常常见的数据结构,它由根节点、左子树和右子树组成。在二叉树中,每个节点都有一个唯一的父节点,除根节点外,每个节点都有一个唯一的左子节点和右子节点。二叉树可以用递归的方式来定义,如下:

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 是二叉树节点的个数。