根据二叉树前根中根遍历出来的数组还原二叉树。
前根:ABDGCEFH 后跟:DGBAECHF
上代码:
private BinaryNode<T> create(T[] prelist, T[] inlist, int preStart, int inStart, int n)
{
if (n<=0)
return null;
T elem=prelist[preStart]; //根结点值
BinaryNode<T> p=new BinaryNode<T>(elem); //创建叶子结点
int i=0;
while (i<n && !elem.equals(inlist[inStart+i]))
//在中根序列中查找根值所在位置
i++;
p.left = create(prelist, inlist, preStart+1, inStart, i); //创建左子树
p.right = create(prelist, inlist, preStart+i+1, inStart+i+1, n-1-i);
//创建右子树
return p;
}
由于前人的思维过于强大,目前智能看懂代码,嘤嘤嘤。等我有时间了再来解释为啥这么做,今天就解释以下过程。
首先从a开始,查询到a的n=8(前根序列的长度),i=2(由代码计算),然后递归左子树,A的左子树为B计算得B.n=A.i=2.B.i=2
此时递归B的左子树,B.Left=D,此时n=2,i=0...出现了0及D.left=null.然后发现进行递归D的右子树。。。。大家顺着思路过一遍就差不多懂了。