返回
多维度解读二叉树的右视图,洞悉数据结构的奥秘
后端
2023-10-15 20:06:07
二叉树与右视图的概念
在计算机科学中,二叉树是一种基本的数据结构,由一个根节点和一系列子节点组成,每个子节点可以进一步拥有自己的子节点,如此递归下去,形成树状结构。二叉树的右视图是指从树的右侧观察时可见的节点。
获取二叉树右视图的两种算法:深度优先搜索和广度优先搜索
获取二叉树的右视图有两种主要算法:深度优先搜索(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
总结
本文详细解析了获取二叉树右视图的两种算法:深度优先搜索和广度优先搜索,并提供了示例和代码片段,帮助读者深入理解二叉树这一数据结构,提升算法解决问题的技能。