二叉树遍历:
怎么区分何种遍历,就是看当前节点的输出顺序
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())
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.cnblogs.com/vonlin/p/15892275.html
内容来源于网络,如有侵权,请联系作者删除!