| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 653 人关注过本帖
标题:二叉树递归遍历二叉树,我的中序和后序输出是不对的,我不知道哪里错了,帮 ...
取消只看楼主 加入收藏
支风儿
Rank: 2
等 级:论坛游民
帖 子:25
专家分:13
注 册:2013-4-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:0 
二叉树递归遍历二叉树,我的中序和后序输出是不对的,我不知道哪里错了,帮帮忙
#include <stdio.h>
#include <malloc.h>
#define TRUE 1
#define FALSE 0
#define OK  1
#define ERROR  0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int  Status;

typedef char  ElemType;
typedef struct BiTNode{
  ElemType data;
  struct BiTNode *lchild,*rchild;//左右孩子指针
} BiTNode,*BiTree;

BiTree CreateBiTree(BiTree &T) {  // 算法6.4
  // 按先序次序输入二叉树中结点的值(一个字符),’#’字符表示空树,
  // 构造二叉链表表示的二叉树T。
  char ch;
  scanf("%c",&ch);
  if (ch=='#')
  T = NULL;
  else {
    if (!(T = (BiTNode *)malloc(sizeof(BiTNode))))
    return ERROR;
    T->data = ch;              // 生成根结点
    CreateBiTree(T->lchild);   // 构造左子树
    CreateBiTree(T->rchild);   // 构造右子树
  }
  return T;
} // CreateBiTree


Status Visit( ElemType e ) {  // 输出元素e的值
     if(e!='#')
    {printf("%c", e );
      return OK;}
    else
    return ERROR;
}// PrintElement


Status PreOrderTraverse( BiTree T) {
   // 算法6.1
   // 采用二叉链表存储结构,Visit是对数据元素操作的应用函数,
   // 先序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。
   // 最简单的Visit函数是:
   //     Status PrintElement( ElemType e ) {  // 输出元素e的值
   //        printf( e );  // 实用时,加上格式串
   //        return OK;
   //     }
   // 调用实例:PreOrderTraverse(T, PrintElement);
   if (T) {
      if (Visit(T->data))
         if (PreOrderTraverse(T->lchild))
            if (PreOrderTraverse(T->rchild))
                return OK;
      return ERROR;
   } else return OK;
} // PreOrderTraverse

Status InOrderTraverse(BiTree T)
{
    if(T)
    {
        if(InOrderTraverse(T->lchild))
            if(Visit(T->data))
                if(InOrderTraverse(T->rchild))
                    return OK;
        return ERROR;
    }
    else
        return OK;
} // InOrderTraverse

Status PostOrderTraverse( BiTree T ) {
     // 后序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。

   if (T) {
       if (PostOrderTraverse(T->rchild))
          if (PostOrderTraverse(T->lchild))
            if  (Visit(T->data))
              return OK;
      return ERROR;
   }
    else return OK;
} // PostOrderTraverse



int main()   //主函数
{  BiTree T;
   CreateBiTree(T);
   PreOrderTraverse(T);
   printf("\n");
   InOrderTraverse(T);
   printf("\n");
   PostOrderTraverse(T);
   printf("\n");
   return OK;
                      //补充代码
 }//main
搜索更多相关主题的帖子: include 二叉树 
2013-04-22 23:12
快速回复:二叉树递归遍历二叉树,我的中序和后序输出是不对的,我不知道哪里错了 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036492 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved