Merge pull request #1110 from xiaofei-2020/tree26

添加(0501.二叉搜索树中的众数.md):增加typescript版本
This commit is contained in:
程序员Carl
2022-03-14 10:14:18 +08:00
committed by GitHub

View File

@ -699,6 +699,107 @@ var findMode = function(root) {
}; };
``` ```
## TypeScript
> 辅助Map法
```typescript
function findMode(root: TreeNode | null): number[] {
if (root === null) return [];
const countMap: Map<number, number> = new Map();
function traverse(root: TreeNode | null): void {
if (root === null) return;
countMap.set(root.val, (countMap.get(root.val) || 0) + 1);
traverse(root.left);
traverse(root.right);
}
traverse(root);
const countArr: number[][] = Array.from(countMap);
countArr.sort((a, b) => {
return b[1] - a[1];
})
const resArr: number[] = [];
const maxCount: number = countArr[0][1];
for (let i of countArr) {
if (i[1] === maxCount) resArr.push(i[0]);
}
return resArr;
};
```
> 递归中直接解决
```typescript
function findMode(root: TreeNode | null): number[] {
let preNode: TreeNode | null = null;
let maxCount: number = 0;
let count: number = 0;
let resArr: number[] = [];
function traverse(root: TreeNode | null): void {
if (root === null) return;
traverse(root.left);
if (preNode === null) { // 第一个节点
count = 1;
} else if (preNode.val === root.val) {
count++;
} else {
count = 1;
}
if (count === maxCount) {
resArr.push(root.val);
} else if (count > maxCount) {
maxCount = count;
resArr.length = 0;
resArr.push(root.val);
}
preNode = root;
traverse(root.right);
}
traverse(root);
return resArr;
};
```
> 迭代法
```typescript
function findMode(root: TreeNode | null): number[] {
const helperStack: TreeNode[] = [];
const resArr: number[] = [];
let maxCount: number = 0;
let count: number = 0;
let preNode: TreeNode | null = null;
let curNode: TreeNode | null = root;
while (curNode !== null || helperStack.length > 0) {
if (curNode !== null) {
helperStack.push(curNode);
curNode = curNode.left;
} else {
curNode = helperStack.pop()!;
if (preNode === null) { // 第一个节点
count = 1;
} else if (preNode.val === curNode.val) {
count++;
} else {
count = 1;
}
if (count === maxCount) {
resArr.push(curNode.val);
} else if (count > maxCount) {
maxCount = count;
resArr.length = 0;
resArr.push(curNode.val);
}
preNode = curNode;
curNode = curNode.right;
}
}
return resArr;
};
```
----------------------- -----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div> <div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>