我如何按级别顺序遍历树?

时间:2020-03-22 14:13:22

标签: typescript

我有一个带有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) 

0 个答案:

没有答案
相关问题