Files
Yudong Jin 2f561d3d51 feat(ko): add the Korean online edition (#2006)
* feat(ko): add the complete Korean online edition

* Use UTF-8 for Python CI output on Windows

* Remove print-book promotion from the Korean site

* fix(ko): preserve emphasis before Korean particles
2026-10-29 03:46:43 +08:00

45 lines
1.5 KiB
JavaScript

/**
* File: build_tree.js
* Created Time: 2023-07-30
* Author: yuan0221 ([email protected])
*/
const { printTree } = require('../modules/PrintUtil');
const { TreeNode } = require('../modules/TreeNode');
/* 이진 트리 구성: 분할 정복 */
function dfs(preorder, inorderMap, i, l, r) {
// 서브트리 구간이 비어 있으면 종료한다
if (r - l < 0) return null;
// 루트 노드를 초기화한다
const root = new TreeNode(preorder[i]);
// m을 조회하여 왼쪽과 오른쪽 서브트리를 나눈다
const m = inorderMap.get(preorder[i]);
// 부분 문제: 왼쪽 서브트리 구성
root.left = dfs(preorder, inorderMap, i + 1, l, m - 1);
// 부분 문제: 오른쪽 서브트리 구성
root.right = dfs(preorder, inorderMap, i + 1 + m - l, m + 1, r);
// 루트 노드를 반환한다
return root;
}
/* 이진 트리 구성 */
function buildTree(preorder, inorder) {
// inorder 원소와 인덱스의 대응 관계를 저장할 해시 테이블을 초기화한다
let inorderMap = new Map();
for (let i = 0; i < inorder.length; i++) {
inorderMap.set(inorder[i], i);
}
const root = dfs(preorder, inorderMap, 0, 0, inorder.length - 1);
return root;
}
/* 실행 코드 */
const preorder = [3, 9, 2, 1, 7];
const inorder = [9, 3, 1, 2, 7];
console.log('전위 순회 = ' + JSON.stringify(preorder));
console.log('중위 순회 = ' + JSON.stringify(inorder));
const root = buildTree(preorder, inorder);
console.log('구성한 이진 트리:');
printTree(root);