📅  最后修改于: 2023-12-03 14:54:30.231000             🧑  作者: Mango
这个问题可以通过深度优先搜索(DFS)来解决。我们从根节点开始遍历整个树,对于每个节点,如果它和它的父节点具有相同的颜色,则将其打印出来,否则我们将其传递给它的子节点。我们需要维护一个前一节点的颜色变量以用于比较。
下面是代码实现:
# 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 dfs(self, node: TreeNode, prev_color: int, res: List[int]) -> None:
if not node:
return
if node.val == prev_color:
res.append(node)
self.dfs(node.left, node.val, res)
self.dfs(node.right, node.val, res)
def printSameColorNodes(self, root: TreeNode) -> List[int]:
if not root:
return []
res = []
self.dfs(root, root.val, res)
return res
这个代码的时间复杂度是O(n),因为我们需要遍历整个树。空间复杂度也是O(n),因为我们需要存储所有符合要求的节点。