Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8ffdfd8

Browse files
committed
solve 116.填充每个节点的下一个右侧节点指针
1 parent 67ac8c7 commit 8ffdfd8

File tree

2 files changed

+225
-0
lines changed

2 files changed

+225
-0
lines changed
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
/*
2+
* @lc app=leetcode.cn id=116 lang=java
3+
*
4+
* [116] 填充每个节点的下一个右侧节点指针
5+
*
6+
* https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/description/
7+
*
8+
* algorithms
9+
* Medium (59.25%)
10+
* Likes: 191
11+
* Dislikes: 0
12+
* Total Accepted: 37.4K
13+
* Total Submissions: 61.8K
14+
* Testcase Example: '[1,2,3,4,5,6,7]'
15+
*
16+
* 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:
17+
*
18+
* struct Node {
19+
* ⁠ int val;
20+
* ⁠ Node *left;
21+
* ⁠ Node *right;
22+
* ⁠ Node *next;
23+
* }
24+
*
25+
* 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
26+
*
27+
* 初始状态下,所有 next 指针都被设置为 NULL。
28+
*
29+
*
30+
*
31+
* 示例:
32+
*
33+
*
34+
*
35+
*
36+
* 输入:{"$id":"1","left":{"$id":"2","left":{"$id":"3","left":null,"next":null,"right":null,"val":4},"next":null,"right":{"$id":"4","left":null,"next":null,"right":null,"val":5},"val":2},"next":null,"right":{"$id":"5","left":{"$id":"6","left":null,"next":null,"right":null,"val":6},"next":null,"right":{"$id":"7","left":null,"next":null,"right":null,"val":7},"val":3},"val":1}
37+
*
38+
*
39+
* 输出:{"$id":"1","left":{"$id":"2","left":{"$id":"3","left":null,"next":{"$id":"4","left":null,"next":{"$id":"5","left":null,"next":{"$id":"6","left":null,"next":null,"right":null,"val":7},"right":null,"val":6},"right":null,"val":5},"right":null,"val":4},"next":{"$id":"7","left":{"$ref":"5"},"next":null,"right":{"$ref":"6"},"val":3},"right":{"$ref":"4"},"val":2},"next":null,"right":{"$ref":"7"},"val":1}
40+
*
41+
* 解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。
42+
*
43+
*
44+
*
45+
*
46+
* 提示:
47+
*
48+
*
49+
* 你只能使用常量级额外空间。
50+
* 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。
51+
*
52+
*
53+
*/
54+
55+
// @lc code=start
56+
/*
57+
// Definition for a Node.
58+
class Node {
59+
public int val;
60+
public Node left;
61+
public Node right;
62+
public Node next;
63+
64+
public Node() {}
65+
66+
public Node(int _val) {
67+
val = _val;
68+
}
69+
70+
public Node(int _val, Node _left, Node _right, Node _next) {
71+
val = _val;
72+
left = _left;
73+
right = _right;
74+
next = _next;
75+
}
76+
};
77+
*/
78+
79+
class Solution {
80+
public Node connect(Node root) {
81+
if (root == null) {
82+
return null;
83+
}
84+
85+
Queue<Node> queue = new LinkedList<>();
86+
queue.offer(root);
87+
88+
while (!queue.isEmpty()) {
89+
int size = queue.size();
90+
Node pre = null;
91+
for (int i = 0; i < size; i++) {
92+
Node node = queue.poll();
93+
node.next = pre;
94+
pre = node;
95+
if (node.right != null) {
96+
queue.offer(node.right);
97+
}
98+
if (node.left != null) {
99+
queue.offer(node.left);
100+
}
101+
}
102+
}
103+
104+
return root;
105+
}
106+
}
107+
// @lc code=end
108+
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
/*
2+
* @lc app=leetcode.cn id=117 lang=java
3+
*
4+
* [117] 填充每个节点的下一个右侧节点指针 II
5+
*
6+
* https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii/description/
7+
*
8+
* algorithms
9+
* Medium (48.62%)
10+
* Likes: 162
11+
* Dislikes: 0
12+
* Total Accepted: 23.2K
13+
* Total Submissions: 46.7K
14+
* Testcase Example: '[1,2,3,4,5,null,7]'
15+
*
16+
* 给定一个二叉树
17+
*
18+
* struct Node {
19+
* ⁠ int val;
20+
* ⁠ Node *left;
21+
* ⁠ Node *right;
22+
* ⁠ Node *next;
23+
* }
24+
*
25+
* 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
26+
*
27+
* 初始状态下,所有 next 指针都被设置为 NULL。
28+
*
29+
*
30+
*
31+
* 进阶:
32+
*
33+
*
34+
* 你只能使用常量级额外空间。
35+
* 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。
36+
*
37+
*
38+
*
39+
*
40+
* 示例:
41+
*
42+
*
43+
*
44+
* 输入:root = [1,2,3,4,5,null,7]
45+
* 输出:[1,#,2,3,#,4,5,7,#]
46+
* 解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。
47+
*
48+
*
49+
*
50+
* 提示:
51+
*
52+
*
53+
* 树中的节点数小于 6000
54+
* -100 <= node.val <= 100
55+
*
56+
*
57+
*
58+
*
59+
*
60+
*
61+
*
62+
*/
63+
64+
// @lc code=start
65+
/*
66+
// Definition for a Node.
67+
class Node {
68+
public int val;
69+
public Node left;
70+
public Node right;
71+
public Node next;
72+
73+
public Node() {}
74+
75+
public Node(int _val) {
76+
val = _val;
77+
}
78+
79+
public Node(int _val, Node _left, Node _right, Node _next) {
80+
val = _val;
81+
left = _left;
82+
right = _right;
83+
next = _next;
84+
}
85+
};
86+
*/
87+
88+
class Solution {
89+
public Node connect(Node root) {
90+
if (root == null) {
91+
return null;
92+
}
93+
94+
Queue<Node> queue = new LinkedList<>();
95+
queue.offer(root);
96+
97+
while (!queue.isEmpty()) {
98+
int size = queue.size();
99+
Node pre = null;
100+
for (int i = 0; i < size; i++) {
101+
Node node = queue.poll();
102+
node.next = pre;
103+
pre = node;
104+
if (node.right != null) {
105+
queue.offer(node.right);
106+
}
107+
if (node.left != null) {
108+
queue.offer(node.left);
109+
}
110+
}
111+
}
112+
113+
return root;
114+
}
115+
}
116+
// @lc code=end
117+

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /