Given a binary tree
struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; }
Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL
.
Initially, all next pointers are set to NULL
.
Note:
- You may only use constant extra space.
- You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).
For example,
Given the following perfect binary tree,
1 / \ 2 3 / \ / \ 4 5 6 7
After calling your function, the tree should look like:
1 -> NULL / \ 2 -> 3 -> NULL / \ / \ 4->5->6->7 -> NULL
思路: 对于处理不同layer的BT问题,我常用的方法就是current数组和next数组来分别储存不同layer的node, 因而这个题就非常容易解决
# Definition for a binary tree node
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
# self.next = None
class Solution:
# @param root, a tree node
# @return nothing
def connect(self, root):
if root == None:
return
root.next = None
current = [root]
while len(current) != 0:
next = []
for node in current:
if node.left != None:
next.append(node.left)
if node.right != None:
next.append(node.right)
for i in range(0, len(next)):
if i == len(next) -1:
next[i].next = None
else:
next[i].next = next[i+1]
current = next