Browse Source

treenode 添加 vist函数

master
blobt 4 years ago
parent
commit
7a11f3ff0b
  1. 22
      src/TreeNode.ts
  2. 14
      src/index.ts

22
src/TreeNode.ts

@ -1,3 +1,6 @@
import { Indexer, IndexerL2R } from "./IAdapter";
export type NodeCallback<T> = (node: TreeNode<T>) => void;
export class TreeNode<T> {
private _parent: TreeNode<T> | undefined;
private _children: Array<TreeNode<T>> | undefined;
@ -160,4 +163,23 @@ export class TreeNode<T> {
}
return total;
}
public visit(preOrderFunc: NodeCallback<T> | null = null, postOrderFunc: NodeCallback<T> | null = null, indexFunc: Indexer = IndexerL2R): void {
if (preOrderFunc !== null) {
preOrderFunc(this);
}
let arr: Array<TreeNode<T>> | undefined = this._children;
if (arr !== undefined) {
for (let i: number = 0; i < arr.length; i++) {
let child: TreeNode<T> | undefined = this.getChildAt(indexFunc(arr.length, i));
if(child !== undefined){
child.visit(preOrderFunc, postOrderFunc, indexFunc);
}
}
}
if (postOrderFunc !== null) {
postOrderFunc(this);
}
}
}

14
src/index.ts

@ -41,17 +41,9 @@ class TreeNodeTest {
}
let root: NumberNode = TreeNodeTest.createTree();
let iter: IEnumberator<TreeNode<number>>;
let current: TreeNode<number> | 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));
root.visit(null, printNodeInfo, IndexerR2L);
Loading…
Cancel
Save