例如如下的先序遍历字符串:
A ST C # # D 10 # G # # F # # #
各结点数据(长度不超过3),用空格分开,其中“#”代表空树。
建立起此二叉树以后,再按要求输出二叉树。
输入由多组测试数据组成。
每组数据包含一行字符串,即二叉树的先序遍历,字符串长度大于0且不超过100。
//对于每组数据,显示对应的二叉树,然后再输出一空行。输出形式相当于常规树形左旋90度。见样例。 注意二叉树的每一层缩进为4,每一行行尾没有空格符号。
代码:
#include <iostream>
#include <cstring>
#include <stdlib.h>
#include<stack>
#include <cstdio>
using namespace std;
typedef struct Node
{
struct Node* lch;
struct Node* rch;
string data;
}
Node;
Node *root;
string s;
Node *CreateTree() ///建立二叉树
{
cin>>s;
Node *root =new Node;
if(s[0]=='#')
{
root=NULL;
return NULL;
}
root->data.assign(s);
root->lch = CreateTree();
root->rch = CreateTree();
return root;
}
void Traversal(Node *root,int cur) ///遍历
{
if(root==NULL)
return;
Traversal(root->rch,cur+1);
for(int i=0;i<cur;i++)
printf(" ");
cout<<root->data<<endl;
Traversal(root->lch,cur+1);
}
void Clear(Node *root) ///清空树
{
if(root)
{
Clear(root->lch);
Clear(root->rch);
delete root;
root=NULL;
}
}
int main()
{
for(int i=0; i<10; i++)
{
Node *root=CreateTree();
Traversal(root,0);
cout<<endl;
Clear(root);
}
return 0;}