| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 354 人关注过本帖
标题:求大神指教二叉排序树的递归建立
只看楼主 加入收藏
guoyouy
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2013-10-29
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:2 
求大神指教二叉排序树的递归建立
这是我创建二叉树的程序,怎样改才能创建二叉排序树。

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

typedef struct BTnode{
    int data;
    struct BTnode *lchild,*rchild;
}BTNODE,*PBTNODE;

PBTNODE create_BTree(PBTNODE);
void inordertraverse_BTree(PBTNODE T);

int main (void){
    PBTNODE H=NULL;
    H=create_BTree(H);
    printf("中序遍历为:");
    inordertraverse_BTree(H);
    return 0;
}

PBTNODE create_BTree(PBTNODE T)
{  
    int i;
    scanf("%d",&i);
    if(-1==i)
    { T=NULL;
    }
    else {
    T=(BTNODE *)malloc(sizeof(BTNODE));
    T->data=i;
    T->lchild=create_BTree(T->lchild);
    T->rchild=create_BTree(T->rchild);
    }
   
     return T;
}

//中序遍历
void inordertraverse_BTree(PBTNODE T){
  if(NULL!=T)
  {   if(NULL!=T->lchild)
  {  inordertraverse_BTree(T->lchild);}
          printf("%d\n",T->data);
         if(NULL!=T->rchild)
         {  inordertraverse_BTree(T->rchild);
         }
  }   
}
2013-11-27 17:23
pink_duo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:209
专家分:1054
注 册:2013-11-5
收藏
得分:19 
mark,下班了,明天来看

埋头做牛,抬头做人,低头做狗
2013-11-27 17:29
haowyoo
Rank: 1
等 级:新手上路
帖 子:2
专家分:1
注 册:2013-11-13
收藏
得分:1 
我这里有个程序
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define NULL 0
typedef struct BiTNode{
    char data;
    struct BiTNode    * lchild, * rchild;
}BiTNode, *BiTree;
int CreateBiTree(BiTree &T){//按先序次序输入二叉树中结点的值
    char e;
    scanf_s ("%c",&e);
    getchar();
    if(e == '#')
        T = NULL;
    else
    {
        T = (BiTree)malloc(sizeof(BiTNode));
        if(!T)
        {
            printf("分配内存失败\n");
            exit(0);
        }
        T->data = e;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
    return 1;
}
int PreOrderTraverse(BiTree T){//先序遍历二叉树T
    if(T){
            printf("%c ",T->data);
            PreOrderTraverse(T->lchild);
            PreOrderTraverse(T->rchild);
    }else
        return 1;
}
int InOrderTraverse(BiTree T)//中序遍历二叉树T
{
    if(T){
        InOrderTraverse(T->lchild);
        printf("%c ",T->data);
        InOrderTraverse(T->rchild);
    }else
        return 1;
}
int PostOrderTraverse(BiTree T)//后序遍历二叉树T
{
    if (T){
    PostOrderTraverse(T->lchild);
    PostOrderTraverse(T->rchild);
    printf("%c ",T->data);
    }
    return 1;
}
int LeafCount(BiTree T){//计算叶子结点
    if(!T)
        return 0;
    else if(!T->lchild&&!T->rchild)
        return 1;
    else
        return LeafCount(T->lchild) + LeafCount(T->rchild);
}
int Depth(BiTree T)//求树的深度
{
    int dep,L,R;
    if(!T)
        dep = 0;
    else
    {
        L = Depth(T->lchild);
        R = Depth(T->rchild);
        dep = 1 + (L>R?L:R);
    }
    return dep;
}
int main()
{
    int m,n;
    BiTree T;
    printf("Input the bitree:\n");
    CreateBiTree(T);
    printf("先序遍历二叉树:");
    PreOrderTraverse(T);
    printf("\n");
    printf("中序遍历二叉树:");
    InOrderTraverse(T);
    printf("\n");
    printf("后序遍历二叉树:");
    PostOrderTraverse(T);
    printf("\n");
    m = LeafCount(T);
    n = Depth(T);
    printf("总的叶子节点数是:%d\n",m);
    printf("此树深度为:%d\n",n);
    return 0;
}
2013-11-27 21:57
快速回复:求大神指教二叉排序树的递归建立
数据加载中...
 
   



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

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