📅  最后修改于: 2023-12-03 15:39:41.100000             🧑  作者: Mango
在二叉树中,一个节点可以有0、1或2个子节点,但有时候我们需要找出有孙子节点的节点。下面是一个方法来打印具有孙子节点的二叉树节点。
我们可以使用递归的方式遍历二叉树,并检查当前节点是否有孙子节点。如果有,我们将节点的值添加到一个结果列表中。
下面是Python实现:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def __init__(self):
self.result = []
def printGrandson(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
self.helper(root, None, None)
return self.result
def helper(self, node, parent, grandparent):
if not node:
return
if grandparent and grandparent.val is not None:
self.result.append(node.val)
self.helper(node.left, node, parent)
self.helper(node.right, node, parent)
在这个实现中,我们首先定义一个result
列表,将具有孙子节点的节点的值存储在其中。我们然后调用递归的“helper”函数,该函数将检查当前节点是否有孙子节点,如果是,则将当前节点的值添加到结果中。
让我们测试一下上面的实现:
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.left.right = TreeNode(7)
root.right.left = TreeNode(6)
root.right.right = TreeNode(5)
root.right.right.right = TreeNode(9)
s = Solution()
print(s.printGrandson(root)) # [4, 3]
在这个例子中,具有孙子节点的节点是4和3,因此列表中包含这两个值。
打印具有孙子的二叉树的节点,我们可以使用递归的方式遍历二叉树,并检查当前节点是否有孙子节点。如果有,我们将节点的值添加到一个结果列表中。