Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 115fe28

Browse files
committed
update 0116.填充每个节点的下一个右侧节点指针.md C++版本 一种更符合模板的层序遍历
1 parent d89b396 commit 115fe28

File tree

1 file changed

+10
-19
lines changed

1 file changed

+10
-19
lines changed

problems/0116.填充每个节点的下一个右侧节点指针.md

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public:
8787
8888
本题使用层序遍历是最为直观的,如果对层序遍历不了解,看这篇:[二叉树:层序遍历登场!](https://programmercarl.com/0102.二叉树的层序遍历.html)。
8989
90-
层序遍历本来就是一层一层的去遍历,记录一层的头结点(nodePre),然后让nodePre指向当前遍历的节点就可以了
90+
遍历每一行的时候,如果不是最后一个Node,则指向下一个Node;如果是最后一个Node,则指向nullptr
9191
9292
代码如下:
9393
@@ -96,27 +96,18 @@ class Solution {
9696
public:
9797
Node* connect(Node* root) {
9898
queue<Node*> que;
99-
if (root != NULL) que.push(root);
99+
if (root != nullptr) que.push(root);
100100
while (!que.empty()) {
101101
int size = que.size();
102-
vector<int> vec;
103-
Node* nodePre;
104-
Node* node;
105-
for (int i = 0; i < size; i++) { // 开始每一层的遍历
106-
if (i == 0) {
107-
nodePre = que.front(); // 记录一层的头结点
108-
que.pop();
109-
node = nodePre;
110-
} else {
111-
node = que.front();
112-
que.pop();
113-
nodePre->next = node; // 本层前一个节点next指向本节点
114-
nodePre = nodePre->next;
115-
}
116-
if (node->left) que.push(node->left);
117-
if (node->right) que.push(node->right);
102+
for (int i = 0; i < size; ++i) {
103+
Node* node = que.front();
104+
que.pop();
105+
if (i != size - 1) {
106+
node->next = que.front(); //如果不是最后一个Node 则指向下一个Node
107+
} else node->next = nullptr; //如果是最后一个Node 则指向nullptr
108+
if (node->left != nullptr) que.push(node->left);
109+
if (node->right != nullptr) que.push(node->right);
118110
}
119-
nodePre->next = NULL; // 本层最后一个节点指向NULL
120111
}
121112
return root;
122113
}

0 commit comments

Comments
 (0)