简易非递归创建二叉树

来源:互联网 发布:移动互联网软件开发 编辑:程序博客网 时间:2024/06/03 09:11

一般来说创建一个二叉树,需要对push进入堆栈的元素进行标记,但这样代码就比较复杂,并且难以理解,这里我们换一个思路。

void crate(Bitree T1){    char a; cin>>a;    stack s=stackcrate();    Bitree T,t;    if(a=='#')    T1=NULL;    else    {    T1->data=a;  push(s,T1); push(s,T1);// 这里我们每次push两个,代表左右儿子    }    while(!empty(s))    {        cin>>a;        pop(s,T);        if(a=='#')        {            if(T==getpop(s))    T->left=NULL;    // 代码的核心,我们用getpop()来进行判断,如果相同说明是左儿子,反之右儿子!            else                T->right=NULL;        }        else         {            t=(Bitree)malloc(sizeof(struct tree));             t->data=a;            if(T==getpop(s))     //同理!            T->left=t;            else              T->right=t;            push(s,t);push(s,t);        }       }}
1 0
原创粉丝点击