diff --git a/problems/0116.填充每个节点的下一个右侧节点指针.md b/problems/0116.填充每个节点的下一个右侧节点指针.md index 31c81703..bc3a8c6b 100644 --- a/problems/0116.填充每个节点的下一个右侧节点指针.md +++ b/problems/0116.填充每个节点的下一个右侧节点指针.md @@ -87,7 +87,7 @@ public: 本题使用层序遍历是最为直观的,如果对层序遍历不了解,看这篇:[二叉树:层序遍历登场!](https://programmercarl.com/0102.二叉树的层序遍历.html)。 -层序遍历本来就是一层一层的去遍历,记录一层的头结点(nodePre),然后让nodePre指向当前遍历的节点就可以了。 +遍历每一行的时候,如果不是最后一个Node,则指向下一个Node;如果是最后一个Node,则指向nullptr。 代码如下: @@ -96,27 +96,18 @@ class Solution { public: Node* connect(Node* root) { queue que; - if (root != NULL) que.push(root); + if (root != nullptr) que.push(root); while (!que.empty()) { int size = que.size(); - vector vec; - Node* nodePre; - Node* node; - for (int i = 0; i < size; i++) { // 开始每一层的遍历 - if (i == 0) { - nodePre = que.front(); // 记录一层的头结点 - que.pop(); - node = nodePre; - } else { - node = que.front(); - que.pop(); - nodePre->next = node; // 本层前一个节点next指向本节点 - nodePre = nodePre->next; - } - if (node->left) que.push(node->left); - if (node->right) que.push(node->right); + for (int i = 0; i < size; ++i) { + Node* node = que.front(); + que.pop(); + if (i != size - 1) { + node->next = que.front(); //如果不是最后一个Node 则指向下一个Node + } else node->next = nullptr; //如果是最后一个Node 则指向nullptr + if (node->left != nullptr) que.push(node->left); + if (node->right != nullptr) que.push(node->right); } - nodePre->next = NULL; // 本层最后一个节点指向NULL } return root; } diff --git a/problems/动态规划理论基础.md b/problems/动态规划理论基础.md index a4f5b124..4b0a57f6 100644 --- a/problems/动态规划理论基础.md +++ b/problems/动态规划理论基础.md @@ -69,7 +69,7 @@ 相信动规的题目,很大部分同学都是这样做的。 -看一下题解,感觉看懂了,然后照葫芦画瓢,如果能正好画对了,万事大吉,一旦要是没通过,就怎么改都通过不了,对 dp数组的初始化,递归公式,遍历顺序,处于一种黑盒的理解状态。 +看一下题解,感觉看懂了,然后照葫芦画瓢,如果能正好画对了,万事大吉,一旦要是没通过,就怎么改都通过不了,对 dp数组的初始化,递推公式,遍历顺序,处于一种黑盒的理解状态。 写动规题目,代码出问题很正常!