二叉树
class ANode {
constructor(public value: number, public left?: ANode, public right?: ANode) { }
}
let root = new ANode(1, new ANode(2, new ANode(4, new ANode(8))), new ANode(3, new ANode(6), new ANode(7, new ANode(9))))
printNodesLayerZOrder([root], [], true)
function printNodesDeepFirst(n: ANode) {
console.log(n.value)
if (n.left) printNodesDeepFirst(n.left)
if (n.right) printNodesDeepFirst(n.right)
}
function printNodesLayerFirst(ns: ANode[]) {
if (ns.length > 0) {
console.log(ns[0].value)
if (ns[0].left) ns.push(ns[0].left)
if (ns[0].right) ns.push(ns[0].right)
ns.splice(0, 1)
printNodesLayerFirst(ns)
}
}
function printNodesLayerReverse(ns: ANode[]) {
if (ns.length > 0) {
console.log(ns[0].value)
if (ns[0].right) ns.push(ns[0].right)
if (ns[0].left) ns.push(ns[0].left)
ns.splice(0, 1)
printNodesLayerReverse(ns)
}
}
function printNodesLayerZOrder(ns: ANode[], ns2: ANode[], printLeftToRight: boolean) {
if (printLeftToRight && ns.length > 0) {
console.log(ns[0].value)
if (ns[0].left) ns2.splice(0, 0, ns[0].left)
if (ns[0].right) ns2.splice(0, 0, ns[0].right)
ns.splice(0, 1)
if (ns.length == 0) printLeftToRight = !printLeftToRight;
} else if (!printLeftToRight && ns2.length > 0) {
console.log(ns2[0].value)
if (ns2[0].right) ns.splice(0, 0, ns2[0].right)
if (ns2[0].left) ns.splice(0, 0, ns2[0].left)
ns2.splice(0, 1)
if (ns2.length == 0) printLeftToRight = !printLeftToRight;
}
if (ns.length != 0 || ns2.length != 0) {
printNodesLayerZOrder(ns, ns2, printLeftToRight)
}
}