📜  打印从节点到给定完全二叉树的根的路径(1)

📅  最后修改于: 2023-12-03 15:10:01.606000             🧑  作者: Mango

打印从节点到给定完全二叉树的根的路径

给定一个完全二叉树和一个节点,打印出从该节点到根节点的路径。

解题思路

由于给定的是完全二叉树,因此可以利用完全二叉树的性质来解题。

  1. 首先,找到目标节点在完全二叉树中的编号。可以通过从根节点开始遍历,每次选择左子树还是右子树,依次按照完全二叉树的编号来查找目标节点。

  2. 然后,从目标节点开始往上遍历每个节点的父节点,打印出其值即可。直到遍历到根节点为止。

代码实现
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

def print_path(root, node):
    if not root or not node:
        return

    # 找到目标节点在完全二叉树中的编号
    path = []
    while node != root:
        if node.val <= root.val // 2:
            path.append('left')
            node = node.left
        else:
            path.append('right')
            node = node.right
            
    # 从目标节点开始往上遍历每个节点的父节点,打印出其值
    path.reverse()
    for p in path:
        print(p)
测试示例
# 构造二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
root.right.left = TreeNode(6)
root.right.right = TreeNode(7)

# 打印从节点到根的路径
print_path(root, root.left.right)  # 打印 ['left', 'right']
时间复杂度

在最坏情况下,需要遍历完全二叉树的高度,因此时间复杂度为 $O(\log n)$。