二叉树的层序遍历javascript版本

This commit is contained in:
xll
2021-05-21 11:16:42 +08:00
parent 0655161de3
commit f0964bd1eb

View File

@ -79,6 +79,35 @@ public:
return result; return result;
} }
}; };
```
javascript代码
```javascript
var levelOrder = function(root) {
//二叉树的层序遍历
let res=[],queue=[];
queue.push(root);
if(root===null){
return res;
}
while(queue.length!==0){
// 记录当前层级节点数
let length=queue.length;
//存放每一层的节点
let curLevel=[];
for(let i=0;i<length;i++){
let node=queue.shift();
curLevel.push(node.val);
// 存放当前层下一层的节点
node.left&&queue.push(node.left);
node.right&&queue.push(node.right);
}
//把每一层的结果放到结果数组
res.push(curLevel);
}
return res;
};
``` ```
**此时我们就掌握了二叉树的层序遍历了那么如下五道leetcode上的题目只需要修改模板的一两行代码不能再多了便可打倒** **此时我们就掌握了二叉树的层序遍历了那么如下五道leetcode上的题目只需要修改模板的一两行代码不能再多了便可打倒**
@ -122,6 +151,30 @@ public:
} }
}; };
``` ```
javascript代码
```javascript
var levelOrderBottom = function(root) {
let res=[],queue=[];
queue.push(root);
while(queue.length&&root!==null){
// 存放当前层级节点数组
let curLevel=[];
// 计算当前层级节点数量
let length=queue.length;
while(length--){
let node=queue.shift();
// 把当前层节点存入curLevel数组
curLevel.push(node.val);
// 把下一层级的左右节点存入queue队列
node.left&&queue.push(node.left);
node.right&&queue.push(node.right);
}
res.push(curLevel);
}
return res.reverse();
};
```
## 199.二叉树的右视图 ## 199.二叉树的右视图
@ -159,6 +212,29 @@ public:
} }
}; };
``` ```
javascript代码:
```javascript
var rightSideView = function(root) {
//二叉树右视图 只需要把每一层最后一个节点存储到res数组
let res=[],queue=[];
queue.push(root);
while(queue.length&&root!==null){
// 记录当前层级节点个数
let length=queue.length;
while(length--){
let node=queue.shift();
//length长度为0的时候表明到了层级最后一个节点
if(!length){
res.push(node.val);
}
node.left&&queue.push(node.left);
node.right&&queue.push(node.right);
}
}
return res;
};
```
## 637.二叉树的层平均值 ## 637.二叉树的层平均值
@ -199,6 +275,31 @@ public:
``` ```
javascript代码
```javascript
var averageOfLevels = function(root) {
//层级平均值
let res=[],queue=[];
queue.push(root);
while(queue.length&&root!==null){
//每一层节点个数
let length=queue.length;
//sum记录每一层的和
let sum=0;
for(let i=0;i<length;i++){
let node=queue.shift();
sum+=node.val;
node.left&&queue.push(node.left);
node.right&&queue.push(node.right);
}
//每一层的平均值存入数组res
res.push(sum/length);
}
return res;
};
```
## 429.N叉树的层序遍历 ## 429.N叉树的层序遍历
题目链接https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal/ 题目链接https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal/
@ -250,6 +351,31 @@ public:
}; };
``` ```
JavaScript代码
```JavaScript
var levelOrder = function(root) {
//每一层可能有2个以上,所以不再使用node.left node.right
let res=[],queue=[];
queue.push(root);
while(queue.length&&root!==null){
//记录每一层节点个数还是和二叉树一致
let length=queue.length;
//存放每层节点 也和二叉树一致
let curLevel=[];
while(length--){
let node = queue.shift();
curLevel.push(node.val);
//这里不再是 ndoe.left node.right 而是循坏node.children
for(let item of node.children){
item&&queue.push(item);
}
}
res.push(curLevel);
}
return res;
};
```
## 515.在每个树行中找最大值 ## 515.在每个树行中找最大值
题目链接https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row/ 题目链接https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row/
@ -287,6 +413,29 @@ public:
} }
}; };
``` ```
javascript代码
```javascript
var largestValues = function(root) {
//使用层序遍历
let res=[],queue=[];
queue.push(root);
while(root!==null&&queue.length){
//设置max初始值就是队列的第一个元素
let max=queue[0];
let length=queue.length;
while(length--){
let node = queue.shift();
max=max>node.val?max:node.val;
node.left&&queue.push(node.left);
node.right&&queue.push(node.right);
}
//把每一层的最大值放到res数组
res.push(max);
}
return res;
};
```
## 116.填充每个节点的下一个右侧节点指针 ## 116.填充每个节点的下一个右侧节点指针