题目大意:

给出一个二叉树依次删除叶子结点的顺序,求出次二叉树的线序遍历

分析,主要是根据给出的删除叶子结点的顺序建立二叉树,题目有给出:

1.根节点左边的元素都比其小

2.根节点右边的元素都比其大

根据此可写出递归与非递归的程序
非递归:

View Code
include<iostream>
#include<string>
#include<cstring>
using namespace std;

typedef struct BiTree
{
    char data;
    struct BiTree *lchild,*rchild;
}BiTree;

BiTree *CreateBiTree(char ch)
{
    BiTree *leaf=new BiTree[sizeof(BiTree)];    
    leaf->data=ch;
    leaf->lchild=NULL;    
    leaf->rchild=NULL;
    return leaf;
}

BiTree *InsertBiTree(char ch,BiTree *T)
{
    BiTree *leaf=T;

    if(T==NULL)
    {
        T=CreateBiTree(ch);
        return T;
    }
    while(leaf)
    {
        if(leaf->data>ch)
        {
            if(leaf->lchild==NULL)
            {
                leaf->lchild=CreateBiTree(ch);
                break;
            }
            else
                leaf=leaf->lchild;
        }
        else if(leaf->data<ch)
        {
            if(leaf->rchild==NULL)
            {
                leaf->rchild=CreateBiTree(ch);
                break;
            }
            else
                leaf=leaf->rchild;
        }
    }
    return T;
}

void Preorder(BiTree *T)
{
    if(T)
    {
        cout<<T->data;
        Preorder(T->lchild);
        Preorder(T->rchild);
    }
}

int main()
{
    string str,s;
    int i,len;
    while(1)
    {
        str.erase();
        BiTree *Root=NULL;
        while(cin>>s&&s!="*"&&s!="$")
            str+=s;
        len=str.length();
        for(i=len-1;i>=0;i--)
            Root=InsertBiTree(str[i],Root);
        Preorder(Root);
        cout<<endl;    
        if(s=="$")
            break;
        Root=NULL;
        str.erase();
    }
    return 0;
}

递归:

View Code
BiTree *InsertBiTree(char ch,BiTree *T)
{
    if(T==NULL)
    {
        T=new BiTree [sizeof(BiTree)];
        T->data=ch;
        T->lchild=NULL;
        T->rchild=NULL;
        return T;
    }
    if(T->data>ch)
    {
        if(T->lchild==NULL)
        {
            T->lchild=new BiTree [sizeof(BiTree)];
            T->lchild->data=ch;
            T->lchild->lchild=NULL;
            T->lchild->rchild=NULL;
            return T;
        }
        else
            T->lchild=InsertBiTree(ch,T->lchild);
    }
    else
    {
        if(T->rchild==NULL)
        {
            T->rchild=new BiTree [sizeof(BiTree)];
            T->rchild->data=ch;
            T->rchild->lchild=NULL;
            T->rchild->rchild=NULL;
            return T;
        }
        else
            T->rchild=InsertBiTree(ch,T->rchild);
    }
    return T;
}
posted on 2012-04-10 20:15  pcoda  阅读(261)  评论(0编辑  收藏  举报