重建二叉树(基于js)
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹并返回。
一棵樹的根節點可以就是這棵樹前序遍歷的第一個節點,沒毛病吧!
在中序遍歷得到的序列中找到該節點,它左邊的序列就是該節點的左子樹,右序列就是該節點的右子樹。而左右子樹的前序序列和中序序列也可以得到
接著利用遞歸完成二叉樹的重組
?
function TreeNode(x) {? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//構建節點
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]);? ? ? ? ? //找到根節點
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;
}
轉載于:https://www.cnblogs.com/hui-fly/p/9551584.html
總結
以上是生活随笔為你收集整理的重建二叉树(基于js)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 直播系统开发如何才可以抓住用户眼球
- 下一篇: Liunx 重新mount