| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 415 人关注过本帖
标题:各位大佬啊,帮我看下这个用c语言写的树,我用递归函数建立一个二叉树,但是 ...
只看楼主 加入收藏
lyf与朱丽叶
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-11-30
收藏
 问题点数:0 回复次数:0 
各位大佬啊,帮我看下这个用c语言写的树,我用递归函数建立一个二叉树,但是不知道怎么跳出这个递归函数,各位兄弟帮帮忙看下哪里有问题,语法都没有错误,只是在无限的输
/* 二叉树对称根周游的递归算法*/

#include<malloc.h>
#include<stdio.h>

struct BinTreeNode;                         /* 二叉树中结点 */
typedef struct BinTreeNode *PBinTreeNode;   /* 结点的指针类型 */

struct BinTreeNode {
    char  info;                         /* 数据域 */
    PBinTreeNode  llink;                    /* 指向左子女 */
    PBinTreeNode  rlink;                    /* 指向右子女 */
};

typedef struct BinTreeNode *BinTree;
typedef BinTree *PBinTree;
typedef PBinTreeNode BNode;

PBinTreeNode root_btree(PBinTree t) {
    return *t;
}

PBinTreeNode leftChild_btree (PBinTreeNode p){
    return p->llink;
}

PBinTreeNode rightChild_btree (PBinTreeNode p){
    return p->rlink;
}

/*以下算法就是先将二叉树扩充为扩充的二叉树,
然后按先根次序周游的顺序输入结点的信息,
生成一个双链存储的二叉树的过程*/
PBinTreeNode createRest_BTree1()  /* 递归创建从根开始的二叉树 */
{
   PBinTreeNode  pbnode;

    char ch;

    scanf("%c",&ch);

    if (ch == '#')
        
    { pbnode = NULL;}

   else {
        pbnode = (PBinTreeNode )malloc(sizeof(struct BinTreeNode));

        pbnode->info = ch;

        pbnode->llink = createRest_BTree1();    /* 构造左子树 */

        pbnode->rlink = createRest_BTree1();    /* 构造右子树 */
   }
    return pbnode;
}
PBinTree  create_BTree( void ) {
    /* 创建完整的二叉树 */
    PBinTree pbtree = (PBinTree)malloc(sizeof(BinTree));
    if (pbtree != NULL)
        *pbtree = createRest_BTree1() ; /* 递归创建从根开始的二叉树 */
    return pbtree;
}

void visit(BNode p)

{ printf("%c ",p->info); }

void inOrderzhong(BNode p) //中根次序周游的递归算法
{
    if (p == NULL) return;
    inOrderzhong(leftChild_btree(p));
    visit(p);
    inOrderzhong(rightChild_btree(p));
}

void inOrderxian(BNode p)

{ if(p==NULL) return;

   visit(p);

   inOrderxian(leftChild_btree(p));

   inOrderxian(rightChild_btree(p));
}

void inOrderhou(BNode p)

{if(p==NULL) return;

  inOrderhou(leftChild_btree(p));
 
   inOrderhou(rightChild_btree(p));

   visit(p);
}



int main()
{   printf("请创建树:\n");
    PBinTree tree = create_BTree();
    printf("请选择周游的方式\n 1为先根 2为中根 3为后根\n");

    int a;
    scanf("%d",&a);
   switch(a)
   {case 1:inOrderxian(*tree);break;
    case 2:inOrderzhong(*tree);break;
    case 3:inOrderhou(*tree);
   }
   
    putchar('\n');
    return 0;
}

搜索更多相关主题的帖子: 二叉树 c语言 大佬 递归 函数 
2010-11-30 22:19
快速回复:各位大佬啊,帮我看下这个用c语言写的树,我用递归函数建立一个二叉树 ...
数据加载中...
 
   



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

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