c#实现根据前序数组和中序数组重建二叉树

思路

   前序:根节点->左子树->右子树
   中序:左子树->根节点->右子树

c#实现根据前序数组和中序数组重建二叉树_第1张图片

步骤

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上的博客,还不太懂用哈哈哈

你可能感兴趣的:(数据结构和算法(c#))