From 7a11f3ff0b6a520cc07b42f34ef83cca4f7fa0f0 Mon Sep 17 00:00:00 2001 From: blobt Date: Fri, 9 Apr 2021 11:41:13 +0800 Subject: [PATCH] =?UTF-8?q?treenode=20=E6=B7=BB=E5=8A=A0=20vist=E5=87=BD?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/TreeNode.ts | 26 ++++++++++++++++++++++++-- src/index.ts | 14 +++----------- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/TreeNode.ts b/src/TreeNode.ts index 3a8afea4..b7bb64c0 100755 --- a/src/TreeNode.ts +++ b/src/TreeNode.ts @@ -1,7 +1,10 @@ +import { Indexer, IndexerL2R } from "./IAdapter"; + +export type NodeCallback = (node: TreeNode) => void; export class TreeNode { private _parent: TreeNode | undefined; private _children: Array> | undefined; - public name: string ; + public name: string; public data: T | undefined; public constructor(data: T | undefined = undefined, parent: TreeNode | undefined = undefined, name: string) { @@ -155,9 +158,28 @@ export class TreeNode { } public repeatString(target: string, n: number): string { let total: string = ""; - for(let i = 0; i < n; i++){ + for (let i = 0; i < n; i++) { total += target; } return total; } + public visit(preOrderFunc: NodeCallback | null = null, postOrderFunc: NodeCallback | null = null, indexFunc: Indexer = IndexerL2R): void { + if (preOrderFunc !== null) { + preOrderFunc(this); + } + + let arr: Array> | undefined = this._children; + if (arr !== undefined) { + for (let i: number = 0; i < arr.length; i++) { + let child: TreeNode | undefined = this.getChildAt(indexFunc(arr.length, i)); + if(child !== undefined){ + child.visit(preOrderFunc, postOrderFunc, indexFunc); + } + } + } + + if (postOrderFunc !== null) { + postOrderFunc(this); + } + } } \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index af615d05..895b7142 100755 --- a/src/index.ts +++ b/src/index.ts @@ -41,17 +41,9 @@ class TreeNodeTest { } let root: NumberNode = TreeNodeTest.createTree(); -let iter: IEnumberator>; -let current: TreeNode | undefined = undefined; -iter = new NodeT2BEnumberator(root, IndexerR2L, Stack); - -while (iter.moveNext()) { - current = iter.current; - if (current !== undefined) { - console.log(current.repeatString(" ", current.depth * 4) + current.name); - } +function printNodeInfo(node: NumberNode) : void { + console.log(node.repeatString(" ", node.depth * 4) + node.name); } -// iter = new NodeT2BEnumberator(root, IndexerR2L, Queue); -// console.log(TreeNodeTest.outputNodesInfo(iter)); \ No newline at end of file +root.visit(null, printNodeInfo, IndexerR2L);