思路
前序:根节点->左子树->右子树
中序:左子树->根节点->右子树
步骤
1、首先需要确定一个范围,起始点和长度确定一个范围,二叉树比较特殊,需要记录前序的起点和中序的起点来确定左右子树。所以递归函数除了数组外还需要有另外三个传递下去的参数。
GetNode(T[] pre,T[]tin,int P_Start,int T_Start,int Length)
2、函数内分两步:
各种判断为空的情况
循环中序分出左右节点的范围,然后返回结点
代码
public B_TwoTree(T[] pre,T[] tin)
{
this.head=GetNode(pre,tin,0,0,pre.Length);
AfterTree(this.head);//后序输出测试
}
private TreeNode<T> GetNode(T[] pre,T[] tin,int P_Start,int T_Start,int Length)
{
if(P_Start<0||T_Start<0||Length==0)
{
return null;
}
TreeNode<T> node=new TreeNode<T>(pre[P_Start]);
for(int i=T_Start;i<T_Start+Length;i++)
{
if(tin[i].Equals(node.Data))
{
node.Left=GetNode(pre,tin,P_Start+1,T_Start,i-T_Start);//i-T_Start是Length
node.Right=GetNode(pre,tin,P_Start+1+(i-T_Start),i+1,Length-1-(i-T_Start));//总长减去左再减去头结点剩下的就是右的了
}
}
return node;
}
第一次写CSDN上的博客,还不太懂用哈哈哈