注册 登录
编程论坛 数据结构与算法

如何把此程序由递归变成非递归

xy2bl 发布于 2010-12-08 15:29, 588 次点击
void PreOrderTraverse(BiTree T){
    if(T!=NULL){
        P("%c_  ",T->data);;
        PreOrderTraverse(T->lchild);
        PreOrderTraverse(T->rchild);
        
    }
如何把此程序由递归变成非递归,望高手解惑
3 回复
#2
xy2bl2010-12-08 15:58
由非递归变成递归
#3
xy2bl2010-12-08 15:59
打错了
#4
kidangel6662010-12-09 21:34
先序遍历啊
int Num =0;
void PushStack(struct TreeNode* Stack[],struct TreeNode* p)
{
    Stack[Num] =p;
    Num++;
}
struct TreeNode* PopStack(struct TreeNode* Stack[])
{
    struct TreeNode* Temp;
    Temp = Stack[Num-1];
    Num--;
    return Temp;
}


void PreOrderBTree2(struct TreeNode* Tree)
{
    struct TreeNode* Stack[Max];
    struct TreeNode* p;
    Num = 0;
    p = Tree;
    do
    {
        if( NULL !=p)
        {
            printf("%c ",p->Data);
            PushStack(Stack,p);
            p = p->Lsubtree;
        }
        else
        {
             p =PopStack(Stack);
            p = p->Rsubtree;
        }
    }while(0!=Num ||p !=NULL);
}
这个是我写的,主要是要建立一个栈储存根节点,一直到输完左孩子,然后出栈,再进栈右孩子(如果有的话)之后再出栈
1