已知二叉树前序遍历序列与中序遍历序列,构造出原二叉树。
算法思路(数组指针法):
1. 中序遍历序列为主,以指针方式拆分左右子树,以先序遍历为辅,用以找到根结节来区分中序遍历序列左右子树。pre={1,2,4,7,3,5,6,8};vin={4,7,2,1,5,3,8,6}。
2.preStart表示vin中根结节索引(即pre先序遍历结点索引),vinStart与vinEnd表示vin中用根节点隔开的左子树或右子树的起始位置,index表示根节点位置。
3. 每一次的循环体内容(即递归的内容):建立root跟结点,vin分隔左子树:preStart+1至index-1;vin分隔右子树:preStart+index-vinStart+1至inEnd,其中index-inStart+1表示左子树的数量加上当前结点的数量。
4. root.left递归,root.right递归。递归结束条件为inStart>inEnd或者preStart>pre.length-1时返回空结点,之后程序内存栈中将以此回退,返回我们最重要的根结点root。
展开
评论