重建二叉树(基于js)
輸入某二叉樹的前序遍歷和中序遍歷的結(jié)果,請(qǐng)重建出該二叉樹。假設(shè)輸入的前序遍歷和中序遍歷的結(jié)果中都不含重復(fù)的數(shù)字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹并返回。
一棵樹的根節(jié)點(diǎn)可以就是這棵樹前序遍歷的第一個(gè)節(jié)點(diǎn),沒毛病吧!
在中序遍歷得到的序列中找到該節(jié)點(diǎn),它左邊的序列就是該節(jié)點(diǎn)的左子樹,右序列就是該節(jié)點(diǎn)的右子樹。而左右子樹的前序序列和中序序列也可以得到
接著利用遞歸完成二叉樹的重組
?
function TreeNode(x) {? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//構(gòu)建節(jié)點(diǎn)
this.val = x;
this.left = null;
this.right = null;
}
function reConstructBinaryTree(pre, vin){? ? ?
if(pre.length===0||vin.length===0){
return null;
}
? ? var index=vin.indexOf(pre[0]);? ? ? ? ? //找到根節(jié)點(diǎn)
var left=vin.slice(0,index);? ? ? ? ? ? ? ?//左子樹的中序序列
var right=vin.slice(index+1)? ? ? ? ? ? //右子樹的中序遍歷
var node=new TreeNode(pre[0])? ??
node.left=reConstructBinaryTree(pre.slice(1,index+1),left)
node.right=reConstructBinaryTree(pre.slice(index+1),right)
return node;
}
轉(zhuǎn)載于:https://www.cnblogs.com/hui-fly/p/9551584.html
總結(jié)
以上是生活随笔為你收集整理的重建二叉树(基于js)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 直播系统开发如何才可以抓住用户眼球
- 下一篇: Liunx 重新mount