实用数据结构总结之二叉树遍历

二叉树简单总结:
二叉树节点结构:
struct Node{
Node *lchild;//指向其左儿子节点的指针,当其不存在左儿子时为NULL
Node *rchild;//指向其右儿子节点的指针,当其不存在右儿子时为NULL
/*
节点附加信息
.....
*/
}
对于该结构,先序遍历,中序遍历,后序遍历分别为:
先序遍历:

void preOrder(Node *Tree)
{
/*
对当前节点Tree的遍历操作
*/
if(Tree->lchild !=NULL)//递归遍历左子树
preOrder(Tree->lchild);
if(Tree->rchild != NULL)//递归遍历右子树
preOrder(Tree->rchild);
return;
}

void inOrder(Node *Tree)
{
if(Tree->lchild !=NULL)//递归遍历左子树
preOrder(Tree->lchild);
/*
对当前节点Tree的遍历操作
*/
if(Tree->rchild != NULL)//递归遍历右子树
preOrder(Tree->rchild);
return;
}

void postOrder(Node *Tree)
{
if(Tree->lchild !=NULL)//递归遍历左子树
preOrder(Tree->lchild);
if(Tree->rchild != NULL)//递归遍历右子树
preOrder(Tree->rchild);
/*
对当前节点Tree的遍历操作
*/
return;
}
例题:通过先序遍历和中序遍历确定后序遍历
输入:
两个字符串,其长度n均小于等于26
第一行为先序遍历,第一行为中序遍历
输出:
输入样例为多组,对于每组测试用例,输出一行,为后序遍历字符串

#include <iostream>
#include <cstring>
using namespace std;

struct Node//二叉树结点结构体
{
	Node *lchild;//左儿子指针
	Node *rchild;//右儿子指针
	char c;//结点字符信息
}Tree[50];//静态内存分配数组

int loc;//静态数组中已经分配的结点个数

Node *create()//申请一个结点空间,返回指向其的指针
{
	Tree[loc].lchild = Tree[loc].rchild = NULL;//初始化左右儿子为空
	return &Tree[loc++];//返回指针,loc自增
}

char str1[30],str2[30];//先序和中序字符串

void postOrder(Node *T)//后序遍历
{
	if (T->lchild!=NULL)
	postOrder(T->lchild);
	if (T->rchild!=NULL)
	postOrder(T->rchild);
   cout<<T->c;
}

Node *buildtree(int s1,int e1,int s2,int e2)
{
//由字符串的先序遍历和中序遍历还原树,并返回其根节点,其中
//其中先序遍历结果由str1[s1]到str1[e1],中序遍历结果由str2[s2]
//到str2[e2]
Node* ret = create();//为该树根结点申请空间
ret->c = str1[s1];//先序遍历第一个字符
int rootindex;
for (int i=s2;i<=e2;i++)
{
	if (str2[i] == str1[s1])
	{
		rootindex = i;
		break;
	}
}
if (rootindex !=s2)//若左子树不为空
{
	ret->lchild = buildtree(s1+1,s1+(rootindex -s2),s2,rootindex-1);
}
if (rootindex !=e2)
{
	ret->rchild = buildtree(s1+(rootindex - s2)+1,e1,rootindex+1,e2);
}
return  ret;

}

int main()
{
	while(cin>>str1>>str2)
	{
		loc = 0;
		int L1 = strlen(str1);
		int L2 = strlen(str2);

		Node * T = buildtree(0,L1-1,0,L2-1);

		postOrder(T);
		cout<<endl;
	}
	
  //  system("pause");
	return 0;
}


 

原文地址:https://www.cnblogs.com/ainima/p/6331238.html