Skip to content

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)