使用Python查找二叉树中右侧节点的程序
假设我们提供了一棵二叉树。我们还给出了一个指向节点(名为“u”)的指针,我们必须找到位于所提供节点右侧的节点。位于给定节点右侧的节点必须位于同一级别,并且给定节点可以是叶节点或内部节点。
因此,如果输入如下所示:
并且u = 6,则输出为8。
位于节点6右侧的节点是节点8,因此将值8返回给我们。
为了解决这个问题,我们将遵循以下步骤:
如果根为空,则
返回null
dq := 一个新的双端队列
将根插入dq的末尾
当dq不为空时,执行以下操作
dq_size := dq的大小
temp := 一个新的列表
index := -1
对于范围0到dq_size中的每个值,执行以下操作:
node := 从dq删除最后一个元素
如果node的左子节点不为空,则
将node的左子节点添加到dq的末尾
如果node的右子节点不为空,则
将node的右子节点添加到dq的末尾
将node插入temp的末尾
如果node与u相同,则
index := temp的大小 - 1
如果index与temp的大小 - 1相同,则
返回null
如果index > -1,则
返回temp[index + 1]
返回null
让我们看一下以下实现,以便更好地理解:
示例
from queue import deque class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def insert(temp,data): que = [] que.append(temp) while (len(que)): temp = que[0] que.pop(0) if (not temp.left): if data is not None: temp.left = TreeNode(data) else: temp.left = TreeNode(0) break else: que.append(temp.left) if (not temp.right): if data is not None: temp.right = TreeNode(data) else: temp.right = TreeNode(0) break else: que.append(temp.right) def make_tree(elements): Tree = TreeNode(elements[0]) for element in elements[1:]: insert(Tree, element) return Tree def search_node(root, element): if (root == None): return None if (root.val == element): return root res1 = search_node(root.left, element) if res1: return res1 res2 = search_node(root.right, element) return res2 def solve(root, u): if not root: return None dq = deque() dq.append(root) while dq: dq_size = len(dq) temp = [] index = -1 for _ in range(dq_size): node = dq.pop() if node.left: dq.appendleft(node.left) if node.right: dq.appendleft(node.right) temp.append(node) if node == u: index = len(temp) - 1 if index == len(temp) - 1: return None if index > -1: return temp[index + 1] return None root = make_tree([5, 3, 7, 2, 4, 6, 8]) u = search_node(root,6) ret = solve(root, u) print(ret.val)
输入
root = make_tree([5, 3, 7, 2, 4, 6, 8]) u = search_node(root,6)
输出
8
广告