Merge pull request #1075 from jobinben/master

添加 面试题02.07.链表相交.md JavaScript语言解法的注释
This commit is contained in:
程序员Carl
2022-02-18 10:07:40 +08:00
committed by GitHub
2 changed files with 47 additions and 2 deletions

View File

@ -604,7 +604,8 @@ func abs(a int)int{
} }
``` ```
## JavaScript ## JavaScript
递归法:
```javascript ```javascript
var isBalanced = function(root) { var isBalanced = function(root) {
//还是用递归三部曲 + 后序遍历 左右中 当前左子树右子树高度相差大于1就返回-1 //还是用递归三部曲 + 后序遍历 左右中 当前左子树右子树高度相差大于1就返回-1
@ -627,6 +628,48 @@ var isBalanced = function(root) {
}; };
``` ```
迭代法:
```javascript
// 获取当前节点的高度
var getHeight = function (curNode) {
let queue = [];
if (curNode !== null) queue.push(curNode); // 压入当前元素
let depth = 0, res = 0;
while (queue.length) {
let node = queue[queue.length - 1]; // 取出栈顶
if (node !== null) {
queue.pop();
queue.push(node); // 中
queue.push(null);
depth++;
node.right && queue.push(node.right); // 右
node.left && queue.push(node.left); // 左
} else {
queue.pop();
node = queue[queue.length - 1];
queue.pop();
depth--;
}
res = res > depth ? res : depth;
}
return res;
}
var isBalanced = function (root) {
if (root === null) return true;
let queue = [root];
while (queue.length) {
let node = queue[queue.length - 1]; // 取出栈顶
queue.pop();
if (Math.abs(getHeight(node.left) - getHeight(node.right)) > 1) {
return false;
}
node.right && queue.push(node.right);
node.left && queue.push(node.left);
}
return true;
};
```
## TypeScript ## TypeScript
```typescript ```typescript

View File

@ -224,12 +224,14 @@ var getIntersectionNode = function(headA, headB) {
lenA = getListLen(headA), lenA = getListLen(headA),
lenB = getListLen(headB); lenB = getListLen(headB);
if(lenA < lenB) { if(lenA < lenB) {
// 下面交换变量注意加 “分号” ,两个数组交换变量在同一个作用域下时
// 如果不加分号,下面两条代码等同于一条代码: [curA, curB] = [lenB, lenA]
[curA, curB] = [curB, curA]; [curA, curB] = [curB, curA];
[lenA, lenB] = [lenB, lenA]; [lenA, lenB] = [lenB, lenA];
} }
let i = lenA - lenB; let i = lenA - lenB;
while(i-- > 0) { while(i-- > 0) {
curA = curA.next curA = curA.next;
} }
while(curA && curA !== curB) { while(curA && curA !== curB) {
curA = curA.next; curA = curA.next;