//yield*表达式 在generator函数中执行另外一个generator函数
//使用yield*语句遍历完全二叉树
//3个参数分别是左树,当前节点,右树
function Tree(left,label,right){
this.left = left
this.label = label
this.right = right
}
//中序遍历函数
//由于返回的是一个遍历器,所以要用generator函数
//函数体内采用递归算法,所以左树和右树要使用yield*遍历
function* inorder(t){
if(t){
yield* inorder(t.left);
yield* t.label;
yield* inorder(t.right);
}
}
//生成二叉树
function make(array){
//判断是否为叶节点
if(array.length === 1) return new Tree(null,array[0],null)
return new Tree(make(array[0]),array[1],make(array[2]))
}
let tree = make([[['a'],'b',['c']],'d',[['e'],'f',['g']]])
//遍历二叉树
var result = []
for (let node of inorder(tree)){
result.push(node)
}
console.log(result)
yield*使用遍历二叉树结构数据---es6语法
最新推荐文章于 2021-02-13 07:44:31 发布