mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 16:54:50 +08:00
更改ACM模式下如何构建二叉树BUG,修改java&C++代码.
This commit is contained in:
@ -57,11 +57,18 @@ TreeNode* construct_binary_tree(const vector<int>& vec) {
|
|||||||
if (i == 0) root = node;
|
if (i == 0) root = node;
|
||||||
}
|
}
|
||||||
// 遍历一遍,根据规则左右孩子赋值就可以了
|
// 遍历一遍,根据规则左右孩子赋值就可以了
|
||||||
// 注意这里 结束规则是 i * 2 + 2 < vec.size(),避免空指针
|
// 注意这里 结束规则是 i * 2 + 1 < vec.size(),避免空指针
|
||||||
for (int i = 0; i * 2 + 2 < vec.size(); i++) {
|
// 为什么结束规则不能是i * 2 + 2 < arr.length呢?
|
||||||
|
// 如果i * 2 + 2 < arr.length 是结束条件
|
||||||
|
// 那么i * 2 + 1这个符合条件的节点就被忽略掉了
|
||||||
|
// 例如[2,7,9,-1,1,9,6,-1,-1,10] 这样的一个二叉树,最后的10就会被忽略掉
|
||||||
|
// 遍历一遍,根据规则左右孩子赋值就可以了
|
||||||
|
|
||||||
|
for (int i = 0; i * 2 + 1 < vec.size(); i++) {
|
||||||
if (vecTree[i] != NULL) {
|
if (vecTree[i] != NULL) {
|
||||||
// 线性存储转连式存储关键逻辑
|
// 线性存储转连式存储关键逻辑
|
||||||
vecTree[i]->left = vecTree[i * 2 + 1];
|
vecTree[i]->left = vecTree[i * 2 + 1];
|
||||||
|
if(i * 2 + 2 < vec.size())
|
||||||
vecTree[i]->right = vecTree[i * 2 + 2];
|
vecTree[i]->right = vecTree[i * 2 + 2];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -114,9 +121,10 @@ TreeNode* construct_binary_tree(const vector<int>& vec) {
|
|||||||
vecTree[i] = node;
|
vecTree[i] = node;
|
||||||
if (i == 0) root = node;
|
if (i == 0) root = node;
|
||||||
}
|
}
|
||||||
for (int i = 0; i * 2 + 2 < vec.size(); i++) {
|
for (int i = 0; i * 2 + 1 < vec.size(); i++) {
|
||||||
if (vecTree[i] != NULL) {
|
if (vecTree[i] != NULL) {
|
||||||
vecTree[i]->left = vecTree[i * 2 + 1];
|
vecTree[i]->left = vecTree[i * 2 + 1];
|
||||||
|
if(i * 2 + 2 < vec.size())
|
||||||
vecTree[i]->right = vecTree[i * 2 + 2];
|
vecTree[i]->right = vecTree[i * 2 + 2];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -249,12 +257,18 @@ public class Solution {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 遍历一遍,根据规则左右孩子赋值就可以了
|
// 遍历一遍,根据规则左右孩子赋值就可以了
|
||||||
// 注意这里 结束规则是 i * 2 + 2 < arr.length,避免空指针
|
// 注意这里 结束规则是 i * 2 + 1 < arr.length,避免空指针
|
||||||
for (int i = 0; i * 2 + 2 < arr.length; i++) {
|
// 为什么结束规则不能是i * 2 + 2 < arr.length呢?
|
||||||
|
// 如果i * 2 + 2 < arr.length 是结束条件
|
||||||
|
// 那么i * 2 + 1这个符合条件的节点就被忽略掉了
|
||||||
|
// 例如[2,7,9,-1,1,9,6,-1,-1,10] 这样的一个二叉树,最后的10就会被忽略掉
|
||||||
|
for (int i = 0; i * 2 + 1 < arr.length; i++) {
|
||||||
TreeNode node = treeNodeList.get(i);
|
TreeNode node = treeNodeList.get(i);
|
||||||
if (node != null) {
|
if (node != null) {
|
||||||
// 线性存储转连式存储关键逻辑
|
// 线性存储转连式存储关键逻辑
|
||||||
node.left = treeNodeList.get(2 * i + 1);
|
node.left = treeNodeList.get(2 * i + 1);
|
||||||
|
// 再次判断下 不忽略任何一个节点
|
||||||
|
if(i * 2 + 2 < arr.length)
|
||||||
node.right = treeNodeList.get(2 * i + 2);
|
node.right = treeNodeList.get(2 * i + 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user