📜  打印具有孙子的二叉树的节点(1)

📅  最后修改于: 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,因此列表中包含这两个值。

总结

打印具有孙子的二叉树的节点,我们可以使用递归的方式遍历二叉树,并检查当前节点是否有孙子节点。如果有,我们将节点的值添加到一个结果列表中。