您的位置:首页 > 其它

建立二叉树的二叉链表

2016-03-25 22:26 309 查看
[align=left]描述[/align]
已知二叉树的中序序列和前序序列存放在两个一维数组中,尝试建立二叉树的二叉链表。检查是否建立成功的方法是输出该二叉树的后序序列。

[align=left]输入[/align]
分别输入二叉树的中序序列和前序序列

[align=left]输出[/align]
输出二叉树的后序序列

[align=left]输入样例[/align]
ABCDEGF

CBEGDFA

[align=left]输出样例[/align]
C

G

E

F

D

B

A

#include <iostream>
#include <cstring>
#include <stdlib.h>
using namespace std;

typedef struct TreeNode
{
struct TreeNode* lchild;
struct TreeNode* rchild;
char elem;
}TreeNode;

TreeNode* BinaryTree(char *preorder, char *inorder, int len)
{
if(len <= 0)
return NULL;
TreeNode *root = (TreeNode*)malloc(sizeof(TreeNode));
root->elem = preorder[0];
int rootindex = -1;
for(int i = 0; i < len; i ++)
{
if(inorder[i] == preorder[0])
{
rootindex = i;
break;
}
}
//cout << root->elem << endl;
root->lchild = BinaryTree(preorder+1,inorder, rootindex);
root->rchild = BinaryTree(preorder+rootindex+1,inorder+rootindex+1,len-rootindex-1);
return root;
}

void Traversal(TreeNode *root)
{
if(root != NULL)
{
Traversal(root->lchild);
Traversal(root->rchild);
cout << root->elem << endl;
}
}
int main()
{
char inorder[100];
char preorder[100];
cin >> preorder;
cin >> inorder;
int len = strlen(preorder);

TreeNode * root = BinaryTree(preorder, inorder, len);
Traversal(root);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: