层序生成二叉树和层序遍历

#include 
#include 
#include 
using namespace std;
typedef struct TreeNode* BinTree;
typedef int ElementType;//以int为例 
typedef BinTree Position;
struct TreeNode
{
    ElementType Data;
    BinTree left;
    BinTree right;
};
//层序生成二叉树 
BinTree CreateBinTree()
{
    queue q;
    int Data;
    BinTree BT,T;
    scanf("%d",&Data);
    if(Data)
    {

        BT = (BinTree)malloc(sizeof(BinTree));
        BT->Data = Data;
        q.push(BT);
    }
    else return NULL;
    while(!q.empty())
    {
        T = q.front();
        q.pop();

        scanf("%d",&Data);
        if(!Data)T->left = NULL;//如果输入是0 
        else
        {
            T->left = (BinTree)malloc(sizeof(BinTree));
            T->left->Data = Data;
            q.push(T->left);
        }

        scanf("%d",&Data);
        if(!Data)T->right = NULL;
        else
        {
            T->right = (BinTree)malloc(sizeof(BinTree));
            T->right->Data = Data;
            q.push(T->right);
        }
    }
    return BT;
}
//层序遍历二叉树
void LevelOrderTraversal(BinTree BT)
{
    queue q;
    BinTree T;
    if(!BT)return;
    q.push(BT);
    while(!q.empty())
    {
        T = q.front();
        q.pop();
        printf("%5d",T->Data);
        if(T->left)q.push(T->left);
        if(T->right)q.push(T->right);       
    }   
}
int main()
{
    BinTree T;
    T = CreateBinTree();
    LevelOrderTraversal(T);
    return 0;
}

//运行结果

运行结果

你可能感兴趣的:(二叉树&搜索树&平衡树)