数据结构上级习题8:二叉排序树

本文介绍了一种使用C语言构建二叉树的方法,并通过中序遍历输出树的结构。程序首先读取一系列整数作为节点值,然后根据这些值构建二叉树。在构建过程中采用队列辅助实现层次遍历的方式进行节点的插入操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

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

struct Treenode
{   int Data;
    struct Treenode *Lchild, *Rchild;
};
void Setuptree(struct Treenode **T, int b,  struct Treenode *p, int tag )
{	struct Treenode *x;
	x=(struct Treenode *) malloc(sizeof(struct Treenode));
	x->Data = b; x->Lchild = 0;  x->Rchild = 0;
	if ((*T)==0) (*T)=x;
	else if (p != 0)
	   {  if (tag==0) { x->Lchild = p->Lchild;  p->Lchild = x; } 
	      else { x->Rchild = p->Rchild; p->Rchild = x;  }
	   }
	else  if (tag==0)
	{  p = (*T);
	   while (p->Lchild !=0) p=p->Lchild;
	   p->Lchild = x;
	}
	else  { p = (*T); 
                  while (p->Rchild !=0) p=p->Rchild;
	           p->Rchild = x;
                }
}
void InOrder(struct Treenode *T){ 
    if (T!= 0){ 
        InOrder(T->Lchild);
        printf("%4d",T->Data);
        InOrder(T->Rchild);
    } 
}

int main(){
    struct Treenode *T=0,*p, *(Q[20]);
    int Front,Rear;
    int A[100];  
    int i=0,j=0;
    scanf("%d",&A[0]);
    while(A[j++]!=-1){
        scanf("%d",&A[j]);
    }
    Setuptree(&T, A[i++], p, 0);    // 二叉树根结点  
    //printf("i = %d,j = %d\n",i,j);
    int n = j-1;
    /*for(int k=0;k<n;k++){
        printf("%d ",A[k]);
    }*/
    while (i<n){ 
        Front=0;  
        Rear=0;  
        Q[++Rear] = T;
        while (Front<Rear){ 
            p = Q[++Front];
            if (p->Lchild!=0) Q[++Rear] = p->Lchild;        // 左子树 
            else{  
                if (i<n) Setuptree(&T, A[i++], p, 0); 
            }
            if (p->Rchild!=0) Q[++Rear] = p->Rchild;       // 右子树 
            else{ if (i<n) Setuptree(&T, A[i++], p, 1);  
            }
        }
    }
    InOrder(T);

    return 0;
}
(1)非递归定义 树(tree)是由n(n≥0)个结点组成的有限集合。n=0的树称为树;n>0的树T: ① 有且仅有一个结点n0,它没有前驱结点,只有后继结点。n0称作树的根(root)结点。 ② 除结点外n0 , 其余的每一个结点都有且仅有一个直接前驱结点;有零个或多个直接后继结点。 (2)递归定义 一颗大树分成几个大的分枝,每个大分枝再分成几个小分枝,小分枝再分成更小的分枝,… ,每个分枝也都是一颗树,由此我们可以给树的递归定义。 树(tree)是由n(n≥0)个结点组成的有限集合。n=0的树称为树;n>0的树T: ① 有且仅有一个结点n0,它没有前驱结点,只有后继结点。n0称作树的根(root)结点。 ② 除根结点之外的其他结点分为m(m≥0)个互不相交的集合T0,T1,…,Tm-1,其中每个集合Ti(0≤i<m)本身又是一棵树,称为根的子树(subtree)。 2、掌握树的各种术语: (1) 父母、孩子与兄弟结点 (2) 度 (3) 结点层次、树的高度 (4) 边、路径 (5) 无序树、有序树 (6) 森林 3、二叉树的定义 二叉树(binary tree)是由n(n≥0)个结点组成的有限集合,此集合或者为,或者由一个根结点加上两棵分别称为左、右子树的,互不相交的二叉树组成。 二叉树可以为集,因此根可以有的左子树或者右子树,亦或者左、右子树皆为。 4、掌握二叉树的五个性质 5、二叉树的二叉链表存储。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cachel wood

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值