Python程序:使用方向列表遍历二叉树
假设我们有一棵二叉树和一个字符串列表moves,其中包含“R”(右)、“L”(左)和“U”(上)。从根节点开始,我们必须通过执行moves中的每个操作来遍历树,其中: “R”表示遍历到右子节点。 “L”表示遍历到左子节点。 “U”表示遍历到其父节点。
因此,如果输入类似于
["R","R","U","L"],则输出将为3
为了解决这个问题,我们将遵循以下步骤:
past := 新列表
对于moves中的每个操作,执行以下操作:
在past的末尾插入根节点
如果操作与“L”相同,则
root := root的左节点
否则,如果操作与“R”相同,则
root := root的右节点
否则,
从past中删除最后一个元素
root := past中的最后一个元素,并将其从past中删除
返回root的值
让我们看看以下实现,以便更好地理解:
示例
class TreeNode: def __init__(self, data, left = None, right = None): self.val = data self.left = left self.right = right class Solution: def solve(self, root, moves): past = [] for move in moves: past.append(root) if move == "L": root = root.left elif move == "R": root = root.right else: past.pop() root = past.pop() return root.val ob = Solution() root = TreeNode(2) root.right = TreeNode(4) root.right.left = TreeNode(3) root.right.right = TreeNode(5) traverse = ["R","R","U","L"] print(ob.solve(root, traverse))
输入
root = TreeNode(2) root.right = TreeNode(4) root.right.left = TreeNode(3) root.right.right = TreeNode(5) ["R","R","U","L"]
输出
3
广告