mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 11:34:46 +08:00
二叉树的层序遍历javascript版本
This commit is contained in:
@ -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.填充每个节点的下一个右侧节点指针
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user