已知前序序列和中序序列重建二叉树
const qianxu = [1,2,4,7,3,5,6,8]
const zhongxu = [4,7,2,1,5,3,8,6]
class tree{
//初始化一棵树
constructor(root){
this.root = root
this.leftTree = null
this.rightTree = null
}
}
function rebuidTree(qianxu,zhongxu) {
//前序第一个节点必定是根节点,当子树根节点不存在时递归结束
if(qianxu[0]){
//临时变量保存根节点
let rootVal = qianxu[0]
//找到根节点在中序中的索引,根据中序左根右的遍历顺序切割数组
let index = zhongxu.indexOf(rootVal)
//每一个子树进行递归,根据index得知左,右子树的节点数进行切割,注意slice含头不含尾
let leftTree = rebuidTree(qianxu.slice(1,index+1),zhongxu.slice(0,index))
let rightTree = rebuidTree(qianxu.slice(index+1),zhongxu.slice(index+1) )
let root= new tree(rootVal)
root.leftTree = leftTree
root.rightTree = rightTree
return root
}
}
console.log('tree:'rebuidTree(qianxu,zhongxu));
对于二叉树的简单重建,最后得出tree:{ "root": 1, "leftTree": { "root": 2, "leftTree": { "root": 4, "rightTree": { "root": 7 } } }, "rightTree": { "root": 3, "leftTree": { "root": 5 }, "rightTree": { "root": 6, "leftTree": { "root": 8 } } } }