黑马程序员技术交流社区

标题: 一道关于二叉树遍历的算法 [打印本页]

作者: 周易    时间: 2014-8-22 21:40
标题: 一道关于二叉树遍历的算法
Tree CreateTree(Tree T){  
    // 按先后次序输入二叉树中结点的值(一个字符),空格表示空树      // 构造二叉链表表示的二叉树T  
    char ch;  
   scanf("%c",&ch);  
    if(ch=='#') T=NULL;  
    else{  
        if(!(T=(TNode *)malloc(sizeof(TNode))))  
            exit(OVERFLOW);  
        T->data=ch;                 // 生成根节点  
        T->lchild=CreateTree(T->lchild);    // 构造左子树  
        T->rchild=CreateTree(T->rchild);    // 构造右子树  
    }  
    return T;  
}  
  
Status FirstRecursionTraverse(Tree T,Status (*Visit)(ElemType e))  
{   // 先序遍历递归算法  
  
    if(T){  
        if(!Visit(T->data)) return ERROR;  
        FirstTraverse(T->lchild,Visit);  
        FirstTraverse(T->rchild,Visit);      
}  
    return OK;  
}  
  
Status MidTraverse(BiTree T,Status (*Visit)(ElemType e))  
{   // 中序遍历递归算法  
    if(T){  
        MidTraverse(T->lchild,Visit);  
        if(!Visit(T->data)) return ERROR;;  
       MidTraverse(T->rchild,Visit);  
   }  
return OK;  
}  

Status LaterTraverse(BiTree T,Status (*Visit)(ElemType e))  
{   //后序遍历递归算法  
   if(T){  
        LaterTraverse(T->lchild,Visit);  
        LaterTraverse(T->rchild,Visit);  
        if(!Visit(T->data)) return ERROR;;  
   }  
    return OK;  
}  
学了指针,想起之前学过的数据结构,利用所学的东西 也顺便练练手!
作者: 张小楼    时间: 2014-8-22 21:59
灵活利用递归可以解决很多问题
作者: 王绍明    时间: 2014-8-23 09:59
自己想的还是复制黏贴的,辛苦了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2