Merge branch 'youngyangyang04:master' into master

This commit is contained in:
梦华
2022-08-10 15:30:39 +08:00
committed by GitHub
2 changed files with 21 additions and 6 deletions

View File

@ -150,6 +150,7 @@ class Solution {
int count = 1; int count = 1;
//重叠气球的最小右边界 //重叠气球的最小右边界
int leftmostRightBound = points[0][1]; int leftmostRightBound = points[0][1];
for (int i = 1; i < points.length; i++) {
//如果下一个气球的左边界大于最小右边界 //如果下一个气球的左边界大于最小右边界
for(int i = 1; i < points.length; i++){ for(int i = 1; i < points.length; i++){
if (points[i][0] > leftmostRightBound ) { if (points[i][0] > leftmostRightBound ) {

View File

@ -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];
} }
} }
@ -213,7 +221,7 @@ public class Solution {
static class TreeNode { static class TreeNode {
// 节点值 // 节点值
int val; int val;
// 左节点 // 左节点
TreeNode left; TreeNode left;
@ -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);
} }
} }