本文主要是介绍填充每个节点的下一个右侧节点指针(LeetCode),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:
struct Node {int val;Node *left;Node *right;Node *next; }填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为
NULL
。初始状态下,所有 next 指针都被设置为
NULL
。
解题
class Node:def __init__(self, val=0, left=None, right=None, next=None):self.val = valself.left = leftself.right = rightself.next = nextdef connect(root):if not root:return Noneleftmost = rootwhile leftmost.left:head = leftmostwhile head:head.left.next = head.rightif head.next:head.right.next = head.next.lefthead = head.nextleftmost = leftmost.leftreturn root# 辅助函数,用于生成完美二叉树
def build_perfect_tree(vals):if not vals:return Nonenodes = [Node(val) if val is not None else None for val in vals]for i in range(len(nodes)):if nodes[i] is not None:if 2 * i + 1 < len(nodes):nodes[i].left = nodes[2 * i + 1]if 2 * i + 2 < len(nodes):nodes[i].right = nodes[2 * i + 2]return nodes[0]# 辅助函数,用于按层次输出节点值及其next指针,层次之间用#分隔
def level_order_with_next(root):if not root:return []result = []current = rootwhile current:level = currentwhile level:result.append(level.val)level = level.nextresult.append('#')current = current.leftreturn result# 示例测试
vals = [1, 2, 3, 4, 5, 6, 7]
root = build_perfect_tree(vals)
connect(root)
result = level_order_with_next(root)
print(result) # 输出:[1, '#', 2, 3, '#', 4, 5, 6, 7, '#']
这篇关于填充每个节点的下一个右侧节点指针(LeetCode)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!