继续刷题,题目如下图
如果用C描述的话,就是一个二叉树节点定义包括右节点指针,左节点指针,和右相连指针;给出一个二叉树,维护其右相邻指针,如果是最右边节点,则指针为空。
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
思路其实很简单,这个可以按层分析二叉树,首先把当前层节点按照从左到右放入一个队列中,遍历这个队列;如果不是队列最后一个节点,则按照当前节点的next就是下一个节点;同时把每一个节点的子节点按照从左到右放入下一层队列;然后 遍历下一层队列;直到这个队列为空,遍历完成。
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
""" # Definition for a Node. class Node: def __init__(self, val: int = 0, left: ‘Node‘ = None, right: ‘Node‘ = None, next: ‘Node‘ = None):
self.val = val
self.left = left
self.right = right
self.next = next
""" class Solution:
def connect( self , root: ‘Node‘ ) - > ‘Node‘ :
if root = = None :
return None
else :
nodeList = []
nodeList.append(root)
while nodeList ! = []:
nextList = []
for i in range ( len (nodeList)):
if nodeList[i].left ! = None :
nextList.append(nodeList[i].left)
if nodeList[i].right ! = None :
nextList.append(nodeList[i].right)
if i! = len (nodeList) - 1 :
nodeList[i]. next = nodeList[i + 1 ]
nodeList = nextList
return root
|