poj_1577_Falling Leaves

题目大意:

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

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

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;

}

你可能感兴趣的:(poj)