📅  最后修改于: 2023-12-03 15:10:01.606000             🧑  作者: Mango
给定一个完全二叉树和一个节点,打印出从该节点到根节点的路径。
由于给定的是完全二叉树,因此可以利用完全二叉树的性质来解题。
首先,找到目标节点在完全二叉树中的编号。可以通过从根节点开始遍历,每次选择左子树还是右子树,依次按照完全二叉树的编号来查找目标节点。
然后,从目标节点开始往上遍历每个节点的父节点,打印出其值即可。直到遍历到根节点为止。
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)$。