返回

多维度解读二叉树的右视图,洞悉数据结构的奥秘

后端

二叉树与右视图的概念

在计算机科学中,二叉树是一种基本的数据结构,由一个根节点和一系列子节点组成,每个子节点可以进一步拥有自己的子节点,如此递归下去,形成树状结构。二叉树的右视图是指从树的右侧观察时可见的节点。

获取二叉树右视图的两种算法:深度优先搜索和广度优先搜索

获取二叉树的右视图有两种主要算法:深度优先搜索(DFS)和广度优先搜索(BFS)。

深度优先搜索(DFS)从根节点开始,沿着一棵子树的深度进行遍历。当到达子树的最底层时,再返回上层并继续遍历其他子树。
广度优先搜索(BFS)则从根节点开始,逐层遍历整棵树。即先访问所有第一层的节点,然后再访问所有第二层的节点,依此类推,直至访问整棵树的所有节点。

获取右视图的实现步骤

  • 深度优先搜索(DFS)算法:

    • 从根节点开始,将根节点添加到结果列表中。
    • 遍历根节点的所有子节点,将子节点添加到结果列表中。
    • 重复步骤2,直到遍历完所有节点。
  • 广度优先搜索(BFS)算法:

    • 将根节点添加到队列中。
    • 从队列中移除一个节点,并将其添加到结果列表中。
    • 将该节点的所有子节点添加到队列中。
    • 重复步骤2和3,直到队列为空。

算法示例:

# Definition for a binary tree node.
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

class Solution:
    def rightSideView(self, root: TreeNode) -> List[int]:
        # DFS
        result = []

        def dfs(node, level):
            if not node:
                return

            if level == len(result):
                result.append(node.val)

            dfs(node.right, level + 1)
            dfs(node.left, level + 1)

        dfs(root, 0)
        return result

    def rightSideView_BFS(self, root: TreeNode) -> List[int]:
        # BFS
        if not root:
            return []

        queue = [root]
        result = []

        while queue:
            level_size = len(queue)

            for i in range(level_size):
                node = queue.pop(0)

                if i == level_size - 1:
                    result.append(node.val)

                if node.left:
                    queue.append(node.left)

                if node.right:
                    queue.append(node.right)

        return result

总结

本文详细解析了获取二叉树右视图的两种算法:深度优先搜索和广度优先搜索,并提供了示例和代码片段,帮助读者深入理解二叉树这一数据结构,提升算法解决问题的技能。