最近去笔试必考的题目,很简单,可惜我都给忘了- -。痛下决心好好研究一下。
一般是给与二叉树的两种遍历方式,求第三种。
先说下步骤:
首先,先要把树构造出来(废话),构造树就要先把树的根节点构造出来,左边就是左子树,右边就是右子树,再以左(右)孩子为根节点不停递归。。。然后就按遍历方式遍历就出结果了。
先上代码:已知前序中序求后序
#include<stdio.h>
#include<stdlib.h>
#include<fstream.h>
struct TreeNode
{
struct TreeNode* left;
struct TreeNode* right;
char elem;
};
void BinaryTreeTraversal(char* front, char* middle, int length)
{
if(length==0){
return;
}
TreeNode * temp=(struct TreeNode*)malloc(sizeof(struct TreeNode*));
temp->elem=*front;
for(int index=0;index<length;index++){
if(middle[index]==*front){
break;//找当前根节点
}
}
BinaryTreeTraversal(front+1,middle,index);//遍历左子树
BinaryTreeTraversal(front+index+1,middle+index+1,length-(index+1));//遍历右子树
cout<<temp->elem<<endl;
}
void main(int argc, char* argv[])
{
char* front="LDAFEMHZ";
char* middle="ADEFLHMZ";
BinaryTreeTraversal(front, middle, 8);
system("pause");
}
已知后序中序,求前序。
例:
#include <stdlib.h>
#include<stdio.h>
#include<fstream.h>
struct TreeNode{
char data;
struct TreeNode* left;
struct TreeNode* right;
};
void FrontBinaryTree(char* middle,char* after,int length){
TreeNode* temp=(TreeNode*)malloc(sizeof(TreeNode*));
temp->data=*(after+length-1);
if(length==0){
return;
}
cout<<temp->data<<endl;
for(int index=0;index<length;index++){
if(middle[index]==*(after+length-1))
{
break;
}
}
FrontBinaryTree(middle,after,index);
FrontBinaryTree(middle+index+1,after+index,length-(index+1));
}
void main(){
char* a="ASDFG";
char* b="ASFGD";
FrontBinaryTree(a,b,5);
}