Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e85fbba

Browse files
Merge pull request youngyangyang04#911 from Tiffany-yuan/master
update: 110.平衡二叉树js版本格式化 && 112. 路径总和 路径总和-ii js迭代法
2 parents 22eead3 + 407c084 commit e85fbba

File tree

2 files changed

+80
-21
lines changed

2 files changed

+80
-21
lines changed

‎problems/0110.平衡二叉树.md‎

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -607,29 +607,23 @@ func abs(a int)int{
607607
## JavaScript
608608
```javascript
609609
var isBalanced = function(root) {
610-
//还是用递归三部曲 + 后序遍历 左右中 当前左子树右子树高度相差大于1就返回-1
610+
//还是用递归三部曲 + 后序遍历 左右中 当前左子树右子树高度相差大于1就返回-1
611611
// 1. 确定递归函数参数以及返回值
612-
const getDepth=function(node){
613-
// 2. 确定递归函数终止条件
614-
if(node===null){
615-
return 0;
612+
const getDepth = function(node) {
613+
// 2. 确定递归函数终止条件
614+
if(node === null) return 0;
615+
// 3. 确定单层递归逻辑
616+
let leftDepth = getDepth(node.left); //左子树高度
617+
let rightDepth = getDepth(node.right); //右子树高度
618+
if(leftDepth === -1) return -1;
619+
if(rightDepth === -1) return -1;
620+
if(Math.abs(leftDepth - rightDepth) > 1) {
621+
return -1;
622+
} else {
623+
return 1 + Math.max(leftDepth, rightDepth);
616624
}
617-
// 3. 确定单层递归逻辑
618-
let leftDepth=getDepth(node.left);//左子树高度
619-
if(leftDepth===-1){
620-
return -1;
621-
}
622-
let rightDepth=getDepth(node.right);//右子树高度
623-
if(rightDepth===-1){
624-
return -1;
625-
}
626-
if(Math.abs(leftDepth-rightDepth)>1){
627-
return -1;
628-
}else{
629-
return 1+Math.max(leftDepth,rightDepth);
630-
}
631625
}
632-
return getDepth(root)===-1?false:true;
626+
return !(getDepth(root)===-1);
633627
};
634628
```
635629

‎problems/0112.路径总和.md‎

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,7 @@ func haspathsum(root *treenode,sumnodes *[]int,targetsum int,result *[][]int){
614614

615615
0112.路径总和
616616

617+
**递归**
617618
```javascript
618619
/**
619620
* @param {treenode} root
@@ -643,9 +644,38 @@ let haspathsum = function (root, targetsum) {
643644
// return haspathsum(root.left, targetsum - root.val) || haspathsum(root.right, targetsum - root.val);
644645
};
645646
```
647+
**迭代**
648+
```javascript
649+
let hasPathSum = function(root, targetSum) {
650+
if(root === null) return false;
651+
let nodeArr = [root];
652+
let valArr = [0];
653+
while(nodeArr.length) {
654+
let curNode = nodeArr.shift();
655+
let curVal = valArr.shift();
656+
curVal += curNode.val;
657+
// 为叶子结点,且和等于目标数,返回true
658+
if (curNode.left === null && curNode.right === null && curVal === targetSum) {
659+
return true;
660+
}
661+
// 左节点,将当前的数值也对应记录下来
662+
if (curNode.left) {
663+
nodeArr.push(curNode.left);
664+
valArr.push(curVal);
665+
}
666+
// 右节点,将当前的数值也对应记录下来
667+
if (curNode.right) {
668+
nodeArr.push(curNode.right);
669+
valArr.push(curVal);
670+
}
671+
}
672+
return false;
673+
};
674+
```
646675

647676
0113.路径总和-ii
648677

678+
**递归**
649679
```javascript
650680
let pathsum = function (root, targetsum) {
651681
// 递归法
@@ -677,7 +707,7 @@ let pathsum = function (root, targetsum) {
677707
return res;
678708
};
679709
```
680-
113 路径总和 精简版
710+
**递归 精简版**
681711
```javascript
682712
var pathsum = function(root, targetsum) {
683713
//递归方法
@@ -701,6 +731,41 @@ var pathsum = function(root, targetsum) {
701731
return resPath;
702732
};
703733
```
734+
**迭代**
735+
```javascript
736+
let pathSum = function(root, targetSum) {
737+
if(root === null) return [];
738+
let nodeArr = [root];
739+
let resArr = []; // 记录符合目标和的返回路径
740+
let tempArr = [[]]; // 对应路径
741+
let countArr = [0]; //对应和
742+
while(nodeArr.length) {
743+
let curNode = nodeArr.shift();
744+
let curVal = countArr.shift();
745+
let curNodeArr = tempArr.shift();
746+
curVal += curNode.val;
747+
curNodeArr.push(curNode.val);
748+
// 为叶子结点,且和等于目标数,将此次结果数组push进返回数组中
749+
if (curNode.left === null && curNode.right === null && curVal === targetSum) {
750+
resArr.push(curNodeArr);
751+
}
752+
// 左节点,将当前的和及对应路径也对应记录下来
753+
if (curNode.left) {
754+
nodeArr.push(curNode.left);
755+
countArr.push(curVal);
756+
tempArr.push([...curNodeArr]);
757+
}
758+
// 右节点,将当前的和及对应路径也对应记录下来
759+
if (curNode.right) {
760+
nodeArr.push(curNode.right);
761+
countArr.push(curVal);
762+
tempArr.push([...curNodeArr]);
763+
}
764+
}
765+
return resArr;
766+
};
767+
```
768+
704769

705770

706771

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /