分类:Tree
难度:medium
方法:1.层级遍历 2.拉链法
- 填充每个节点的下一个右侧节点指针
给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。
示例:
题解
- 方法一:层次遍历(使用队列实现)
- 方法二:拉链法
递归的方法,逻辑为:很显然左孩子的next要连到右孩子
然后左孩子的右孩子和右孩子的左孩子应该有连线,这样在一个循环中就完成了2->3和5->6的连接(完成了以当前节点为中心的拉链,好形象),然后左右孩子分别递归下去即可
代码
层次遍历
"""
# Definition for a Node.
class Node(object):
def __init__(self, val=0, left=None, right=None, next=None):
self.val = val
self.left = left
self.right = right
self.next = next
"