二叉树遍历:
怎么区分何种遍历,就是看当前节点的输出顺序
class HeroNode { constructor(no,name){ this.no = no this.name = name } setLeft(left){ this.left = left } setRight(right){ this.right = right } toString(){ console.log(this.name) } preOrder(){ if(this.no == 2) { return false } if(this.left){ this.left.preOrder() } if(this.right){ this.right.preOrder() } } preOrderSearch(no){ if(this.no == no) { return this } let res = null if(this.left){ res = this.left.preOrderSearch(no) } if(res) return res if(this.right){ return this.right.preOrderSearch(no) } return res } infixOrder(){ if(this.left){ this.left.infixOrder() } console.log(this.toString()) if(this.right){ this.right.infixOrder() } } postOrder(){ if(this.left){ this.left.postOrder() } if(this.right){ this.right.postOrder() } console.log(this.toString()) }}class BinaryTree { constructor(root){ this.root = root } setRoot(root){ this.root = root } preOrder(){ if(this.root){ this.root.preOrder() } } infixOrder(){ if(this.root){ this.root.infixOrder() } } postOrder(){ if(this.root){ this.root.postOrder() } } preOrderSearch(no){ if(this.root){ return this.root.preOrderSearch(no) } }}function exec(){ // 创建二叉树 const bt = new BinaryTree() // 创建节点 const root = new HeroNode(1,'刘备') const h2 = new HeroNode(2,'关羽') const h3 = new HeroNode(3,'张飞') const h4 = new HeroNode(4,'赵云') root.setLeft(h2) root.setRight(h3) h3.setRight(h4) bt.setRoot(root) return bt.preOrderSearch(4)}console.log(exec())