js函数不使用递归,遍历该树 interface Node{ value:1, left?:Node; right?:Node; }
时间: 2024-10-10 21:02:07 浏览: 22
Node.js 使用递归实现遍历文件夹中所有文件
JavaScript 中非递归遍历二叉树(如哈夫曼树)通常采用迭代方法,可以使用栈来模拟递归过程。下面是一个简单的示例,假设我们有一个`Node`接口表示二叉树节点:
```javascript
interface Node {
value: number,
left: Node | null,
right: Node | null,
}
function buildHuffmanTree(values: number[]): Node {
// 初始化空堆(最小堆)
const heap = values.map((v) => ({ value: v, priority: 1 }));
while (heap.length > 1) {
// 提取当前堆中的两个最小元素
const min1 = heap[0];
heap.shift();
const min2 = heap[0];
heap.shift();
// 创建新的节点,其值为两小节点的和,优先级为其父节点的优先级
const newRoot = { value: min1.value + min2.value, priority: min1.priority + min2.priority };
// 将新节点添加回堆
heap.push(newRoot);
// 排序堆
heap.sort((a, b) => a.priority - b.priority);
}
// 堆顶即为哈夫曼树的根节点
return heap[0];
}
// 求得哈夫曼树后,可以通过中序遍历来构建并输出序列
function inorderTraversal(node: Node): string[] {
const result: string[] = [];
let stack: Node[] = [];
function traverse(node: Node | null) {
if (!node) return;
stack.push(node);
while (stack.length > 0) {
node = stack.pop();
result.unshift(node.value.toString());
if (node.right) stack.push(node.right);
if (node.left) stack.push(node.left);
}
}
traverse(buildHuffmanTree(values));
return result;
}
// 示例:给定数值数组 [1, 2, 3],生成哈夫曼树并输出中序遍历结果
const values = [1, 2, 3];
const huffmanTree = buildHuffmanTree(values);
console.log(inorderTraversal(huffmanTree)); // ["1", "3", "2"]
```
阅读全文