diff --git a/docs/chapter_tree/binary_tree.md b/docs/chapter_tree/binary_tree.md index 84270be01..81d6e17aa 100644 --- a/docs/chapter_tree/binary_tree.md +++ b/docs/chapter_tree/binary_tree.md @@ -74,7 +74,18 @@ comments: true === "TypeScript" ```typescript title="" + /* 链表结点类 */ + class TreeNode { + val: number; + left: TreeNode | null; + right: TreeNode | null; + constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) { + this.val = val === undefined ? 0 : val; // 结点值 + this.left = left === undefined ? null : left; // 左子结点指针 + this.right = right === undefined ? null : right; // 右子结点指针 + } + } ``` === "C" @@ -215,7 +226,18 @@ comments: true === "TypeScript" ```typescript title="binary_tree.ts" - + /* 初始化二叉树 */ + // 初始化结点 + let n1 = new TreeNode(1), + n2 = new TreeNode(2), + n3 = new TreeNode(3), + n4 = new TreeNode(4), + n5 = new TreeNode(5); + // 构建引用指向(即指针) + n1.left = n2; + n1.right = n3; + n2.left = n4; + n2.right = n5; ``` === "C" @@ -273,7 +295,6 @@ comments: true p := NewTreeNode(0) n1.Left = p p.Left = n2 - // 删除结点 P n1.Left = n2 ``` @@ -286,7 +307,6 @@ comments: true // 在 n1 -> n2 中间插入结点 P n1.left = P; P.left = n2; - // 删除结点 P n1.left = n2; ``` @@ -294,7 +314,13 @@ comments: true === "TypeScript" ```typescript title="binary_tree.ts" - + /* 插入与删除结点 */ + const P = new TreeNode(0); + // 在 n1 -> n2 中间插入结点 P + n1.left = P; + P.left = n2; + // 删除结点 P + n1.left = n2; ``` === "C" @@ -423,7 +449,6 @@ comments: true queue.push(node.left); // 左子结点入队 if (node.right) queue.push(node.right); // 右子结点入队 - } return list; } @@ -432,7 +457,24 @@ comments: true === "TypeScript" ```typescript title="binary_tree_bfs.ts" - + /* 层序遍历 */ + function hierOrder(root: TreeNode | null): number[] { + // 初始化队列,加入根结点 + const queue = [root]; + // 初始化一个列表,用于保存遍历序列 + const list: number[] = []; + while (queue.length) { + let node = queue.shift() as TreeNode; // 队列出队 + list.push(node.val); // 保存结点 + if (node.left) { + queue.push(node.left); // 左子结点入队 + } + if (node.right) { + queue.push(node.right); // 右子结点入队 + } + } + return list; + } ``` === "C" @@ -606,7 +648,38 @@ comments: true === "TypeScript" ```typescript title="binary_tree_dfs.ts" + /* 前序遍历 */ + function preOrder(root: TreeNode | null): void { + if (root === null) { + return; + } + // 访问优先级:根结点 -> 左子树 -> 右子树 + list.push(root.val); + preOrder(root.left); + preOrder(root.right); + } + /* 中序遍历 */ + function inOrder(root: TreeNode | null): void { + if (root === null) { + return; + } + // 访问优先级:左子树 -> 根结点 -> 右子树 + inOrder(root.left); + list.push(root.val); + inOrder(root.right); + } + + /* 后序遍历 */ + function postOrder(root: TreeNode | null): void { + if (root === null) { + return; + } + // 访问优先级:左子树 -> 右子树 -> 根结点 + postOrder(root.left); + postOrder(root.right); + list.push(root.val); + } ``` === "C"