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

思路

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

在这里插入图片描述

步骤

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值