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

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

///


#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;


}


相关文章
|
11天前
|
存储 算法
数据结构与算法学习十六:树的知识、二叉树、二叉树的遍历(前序、中序、后序、层次)、二叉树的查找(前序、中序、后序、层次)、二叉树的删除
这篇文章主要介绍了树和二叉树的基础知识,包括树的存储方式、二叉树的定义、遍历方法(前序、中序、后序、层次遍历),以及二叉树的查找和删除操作。
15 0
数据结构实验之二叉树的建立与遍历
数据结构实验之二叉树的建立与遍历
|
数据安全/隐私保护
列出叶节点 (二叉树的建立和BFS)
列出叶节点 (二叉树的建立和BFS)
90 0
|
存储 编译器
二叉树的递归遍历与迭代遍历(图示)
本文将讲述二叉树递归与迭代的相关知识。
126 0
如何根据二叉树的两种遍历方式重建二叉树(理论篇)
如何根据二叉树的两种遍历方式重建二叉树(理论篇)
109 0
二叉树的三种非递归遍历方式
二叉树的三种非递归遍历方式
【CCCC】L2-006 树的遍历 (25分),根据后序与中序遍历建立二叉树
【CCCC】L2-006 树的遍历 (25分),根据后序与中序遍历建立二叉树
150 0
在二叉树(搜索树)中找到两个节点的最近公共祖先(剑指offer)
在二叉树(搜索树)中找到两个节点的最近公共祖先(剑指offer)
121 0
在二叉树(搜索树)中找到两个节点的最近公共祖先(剑指offer)