C++ 数据结构——基于字符串的前序遍历二叉树创建

数据结构——基于字符串的前序遍历二叉树创建


首先是二叉树结点的定义

typedef struct node {
	char data;
	struct node* left;
	struct node* right;
}LTree,*Tree;

接下来就是构建二叉树了
string s是已知的前序遍历的字符串,其中 0 代表空节点

void createtree(Tree& T,string s,int &pos)//pos用来记录字符串遍历到的位置
{
	if (s[pos] == '0')//如果当前位置字符为'0',则为空节点
	{
		T = NULL;
		pos++;
	}
	else
	{
		T = new LTree;
		T->data = s[pos];
		pos++;
		createtree(T->left, s, pos);
		createtree(T->right, s, pos);
	}
}

建立完成以后让我们分别用前序遍历,中序遍历,后序遍历输出看看建立的对不对
前序遍历输出:

int print(Tree T)
{
	if (T == NULL) { return 1; }
	else {
		cout << T->data;
		print(T->left);
		print(T->right);
	}
}

中序遍历输出:

int print(Tree T)
{
	if (T == NULL) { return 1; }
	else {
		print(T->left);
		cout << T->data;
		print(T->right);
	}
}

后序遍历输出:

int print(Tree T)
{
	if (T == NULL) { return 1; }
	else {
		print(T->left);
		print(T->right);
		cout << T->data;
	}
}

主函数

int main()
{
	string s;
	while (cin >> s && s != "0")//输入的字符串为“0”时跳出循环
	{
		Tree T;
		int e=0;
		createtree(T, s, e);//建立
		print(T);//输出
	}
	return 0;
}

以下是全部的代码(输出用前序遍历):

#include"iostream"
#include"string"
#include"string.h"
using namespace std;

typedef struct node {
	char data;
	struct node* left;
	struct node* right;
}LTree, * Tree;

void createtree(Tree& T, string s, int& pos)
{
	if (s[pos] == '0')
	{
		T = NULL;
		pos++;
	}
	else
	{
		T = new LTree;
		T->data = s[pos];
		pos++;
		createtree(T->left, s, pos);
		createtree(T->right, s, pos);
	}
}

int print(Tree T)
{
	if (T == NULL) { return 1; }
	else {
		cout << T->data;
		print(T->left);
		print(T->right);
	}
}


int main()
{
	string s;
	while (cin >> s && s != "0")
	{
		Tree T;
		int e=0;
		createtree(T, s, e);
		print(T);
		cout << endl;
	}
	return 0;
}

你可能感兴趣的:(数据结构)