如何通过预订和inorder遍历以图形方式绘制bfs树

时间:2017-12-18 11:26:15

标签: c++ tree nodes breadth-first-search

这不是一个重复的问题我在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 ;
}

我在网上搜索但我找不到任何答案 任何想法?

0 个答案:

没有答案