头歌两种遍历方法建立一棵树(前序和中序)

简介: 头歌两种遍历方法建立一棵树(前序和中序)

///


#include <stdio.h>


#include <stdlib.h>


#include <string.h>


#include "ConstructTree.h"


/




/*


InPreToTree(): 由前序遍历序列和中序遍历序列构造二叉树


前序序列为pa[p1:p2]


中序序列为ia[i1:i2]


返回所构造的二叉树的根指针


*/


TNode* InPreToTree(char *pa, char *ia, int p1, int p2, int i1, int i2)


{


   /*请在BEGIN和END之间实现你的代码*/


   /*****BEGIN*****/


  if(p1>p2){


      return NULL;


  }


  TNode* root=new TNode;


  root->data=pa[p1];//将前序数组中第一个元素赋给data,前序数组第一个值都是根节点。


  root->left=NULL;


  root->right=NULL;


  int i=0;


  while(ia[i]!=pa[p1]){


      i++;


  }//查找根节点在中序数组中的位置。


//递归,每次缩小范围,将树一次一次细分。


  int llen=i-i1;//存储左子树长度


   root->left=InPreToTree(pa,ia,p1+1,p1+llen,i1,i-1);//每个根节点左右子树依次递推下去,双亲和子树的递推方法都是一样的。


   int rlen=i2-i;//存储右子树长度,两个分开存储会更好


   root->right=InPreToTree(pa,ia,p2-rlen+1,p2,i+1,i2);


   return root;


   /******END******/


   /*请不要修改[BEGIN,END]区域外的代码*/


}


void PrintPostTravel(TNode* t)


{


   if(t==NULL) return;


   if(t->left) PrintPostTravel(t->left);


   if(t->right) PrintPostTravel(t->right);


   printf("%c", t->data);


}


void DeleteTree(TNode* t)


{


   if(t==NULL) return;


   if(t->left) DeleteTree(t->left);


   if(t->right) DeleteTree(t->right);


   delete t;


}


相关文章
|
6月前
|
算法 C++ 开发者
【C/C++ 数据结构 】二叉树基本性质:对于任何一颗二叉树T,若其终端结点为n0 ,那么度数为2的结点数为n2。则n0=n2+1...
【C/C++ 数据结构 】二叉树基本性质:对于任何一颗二叉树T,若其终端结点为n0 ,那么度数为2的结点数为n2。则n0=n2+1...
77 0
|
1月前
|
存储 算法
数据结构与算法学习十六:树的知识、二叉树、二叉树的遍历(前序、中序、后序、层次)、二叉树的查找(前序、中序、后序、层次)、二叉树的删除
这篇文章主要介绍了树和二叉树的基础知识,包括树的存储方式、二叉树的定义、遍历方法(前序、中序、后序、层次遍历),以及二叉树的查找和删除操作。
24 0
|
算法 C语言 C++
【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅲ
这题算是简单题,我们依然从最简单的情况来考虑。
63 0
数据结构实验之二叉树的建立与遍历
数据结构实验之二叉树的建立与遍历
|
存储
二叉树相关问题细谈递归(上)
二叉树相关问题细谈递归
70 0
二叉树相关问题细谈递归(下)
二叉树相关问题细谈递归(下)
63 0
|
存储 算法 C语言
【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅱ
这里有两种方法(深度优先搜索与广度优先搜索)其实也就是前序遍历与层序遍历,层序遍历这里简单提一下.与上面的大同小异就不过多赘述了:依旧是遍历出每一层最大的值,将其放入数组即可.
67 0
|
算法 UED 容器
【算法入门&二叉树】从先中后序的遍历到用中后序列构造二叉树|如何抵挡递归法该死的魅力(上)
【算法入门&二叉树】从先中后序的遍历到用中后序列构造二叉树|如何抵挡递归法该死的魅力
119 0
如何根据二叉树的两种遍历方式重建二叉树(理论篇)
如何根据二叉树的两种遍历方式重建二叉树(理论篇)
116 0
|
存储 机器学习/深度学习 Java
《Java数据结构》这些树和二叉树的性质你还记得吗?
《Java数据结构》这些树和二叉树的性质你还记得吗?
118 0