这不是一个重复的问题我在SO中搜索但我无法找到任何预先订购和顺序遍历的方法,我想在控制台中以图形方式绘制bfs树> 首先我们得到inorder和preorder遍历,然后我们计算它们的大小。我们通过我发布的代码中存在的函数构建树 然后我展示了bfs遍历。我的问题是在控制台中以图形方式绘制。
我想要这个类似的解决方案:
1
/ \
2 3
/ / \
4 5 6
这是我的代码:
#include<iostream>
using namespace std ;
struct node
{
char data;
struct node* left;
struct node* right;
};
int searching(char arr[], int strt, int ending, char value)
{
int i;
for(i = strt; i <= ending; i++)
{
if(arr[i] == value)
return i;
}
}
struct node* newNode(char data)
{
node* node1 = new node();
node1->data = data;
node1->left = NULL;
node1->right = NULL;
return(node1);
}
struct node* buildTree(char in[], char pre[], int inStrt, int inEnd)
{
static int preIndex = 0;
if(inStrt > inEnd)
return NULL;
struct node *tNode = newNode(pre[preIndex++]);
if(inStrt == inEnd)
return tNode;
int inIndex = searching(in, inStrt, inEnd, tNode->data);
tNode->left = buildTree(in, pre, inStrt, inIndex-1);
tNode->right = buildTree(in, pre, inIndex+1, inEnd);
return tNode;
}
void printInorder(struct node* node)
{
if(node == NULL)
return;
printInorder(node->left);
cout << node->data;
printInorder(node->right);
}
void printPostorder(struct node* node)
{
if(node == NULL)
return;
printPostorder(node->left);
printPostorder(node->right);
cout << node->data;
}
int x=-1 , y=-1 ;
node* Queue[100];
void Add(struct node* node)
{
Queue[++x] = node ;
}
node* del()
{
node* item ;
item= Queue[++y] ;
return item ;
}
int counter=0 ;
void printBFS(struct node* node)
{
if(node!=NULL)
{
Add(node) ;
while(x!=y)
{
node = del() ;
cout << node->data ;
if(node->left!=NULL) Add(node->left) ;
if(node->right!=NULL) Add(node->right) ;
}
}
}
int main()
{
char in[] = {'B' , 'c' , 'A' , 'E' , 'D' , 'G' , 'H' , 'F'} ;
char pre[] ={'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H'} ;
int len = sizeof(in);
struct node *root = buildTree(in, pre, 0, len - 1);
cout << "BFS traversal of the constructed tree is \n" ;
printBFS(root); /// show bfs traversal
return 0 ;
}
我在网上搜索但我找不到任何答案 任何想法?