我有一个带有typescript
的代码二进制树,并且使function
遍历in order
现在我想使用相同的代码进行level order
树代码:
import {BinaryTreeNode} from './node'
export class BinaryTree {
traversalArray:any[]=[]
totalLeafs:any[]=[]
root: BinaryTreeNode;
constructor(root:BinaryTreeNode){
this.root = root
}
isEmpty(){
if(this.root == null){
return 'Yes , This tree is empty'
}else{
return 'No , This tree contain values'
}
}
getLeafs(treeNode:BinaryTreeNode){
if(treeNode == null){
this.getLeafs(this.root)
}
if (treeNode == undefined) {
return false
}
if(treeNode.isLeaf()){
treeNode.isLeaf()
console.log('leaf >>>> ',treeNode.isLeaf())
this.totalLeafs.push(treeNode.isLeaf())
}else{
if(treeNode.refLeft && !treeNode.refRight){
this.getLeafs(treeNode.refLeft)
}else if(!treeNode.refLeft && treeNode.refRight){
this.getLeafs(treeNode.refRight)
}else if(treeNode.refLeft && treeNode.refRight){
this.getLeafs(treeNode.refLeft)
this.getLeafs(treeNode.refRight)
}
}
}
onlyUnique(value, index, self) {
return self.indexOf(value) === index;
}
traversalInOrder(treeNode:BinaryTreeNode){
if (treeNode == null) {
this.traversalInOrder(this.root);
}
if (treeNode == undefined) {
return false;
}
if( treeNode.refLeft && !treeNode.refRight ){
this.traversalInOrder(treeNode.refLeft);
this.traversalArray.push(treeNode.refLeft.value)
}else if ( treeNode.refLeft && treeNode.refRight) {
this.traversalInOrder(treeNode.refLeft);
this.traversalInOrder(treeNode.refRight);
this.traversalArray.push(treeNode.refLeft.value,treeNode.value,treeNode.refRight.value)
}else if ( treeNode.refRight && !treeNode.refLeft ){
this.traversalInOrder(treeNode.refRight);
}
var unique = this.traversalArray.filter( this.onlyUnique );
console.log('Traversal in order : ', unique)
}
}
节点代码:
import {BinaryTree} from './tree'
export class BinaryTreeNode{
value: number;
refLeft: BinaryTreeNode;
refRight: BinaryTreeNode;
constructor(value: number=null, refLeft: BinaryTreeNode, refRight: BinaryTreeNode) {
this.value = value;
this.refLeft=refLeft;
this.refRight=refRight;
}
isLeaf(){
if(!this.refLeft && !this.refRight){
return this.value
}else{
return false
}
}
}
let nood19: BinaryTreeNode = new BinaryTreeNode(19,null,null)
let nood48: BinaryTreeNode = new BinaryTreeNode(48,null,null)
let nood15: BinaryTreeNode = new BinaryTreeNode(15,null,null)
let nood59: BinaryTreeNode = new BinaryTreeNode(59,null,null)
let nood11: BinaryTreeNode = new BinaryTreeNode(11,null,null)
let nood61: BinaryTreeNode = new BinaryTreeNode(61,nood19,null)
let nood1: BinaryTreeNode = new BinaryTreeNode(1,nood15,nood48)
let nood77: BinaryTreeNode = new BinaryTreeNode(77,nood11,nood59)
let nood5: BinaryTreeNode = new BinaryTreeNode(5,nood1,nood61)
let root: BinaryTreeNode = new BinaryTreeNode(26,nood5,nood77)
let binaryTree = new BinaryTree(root)
console.log('Tree State empty ??',binaryTree.isEmpty())
binaryTree.getLeafs(this.root)
console.log('Total Number Of Leafs : ', binaryTree.totalLeafs.length)
binaryTree.traversalInOrder(this.root)
// console.log('Traversal in order ',binaryTree.traversalArray)