mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 19:44:45 +08:00
二叉树的层序遍历javascript版本
This commit is contained in:
@ -79,6 +79,35 @@ public:
|
||||
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上的题目,只需要修改模板的一两行代码(不能再多了),便可打倒!**
|
||||
@ -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.二叉树的右视图
|
||||
@ -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.二叉树的层平均值
|
||||
|
||||
@ -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叉树的层序遍历
|
||||
|
||||
题目链接: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.在每个树行中找最大值
|
||||
|
||||
题目链接: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.填充每个节点的下一个右侧节点指针
|
||||
|
||||
|
Reference in New Issue
Block a user