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);