本文共 1905 字,大约阅读时间需要 6 分钟。
/**********1 先序遍历生成二叉树
2 单个生结点生成二叉树 3 求二叉树叶结点和 4 求二叉树树高#include<stdio.h>
#include<malloc.h>typedef struct BiTnode{
int data; struct BiTnode *lchild; struct BiTnode *rchild;}BiTnode,*BiTree;void CreateBiTree(BiTree &T)
{//按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树, //构造二叉链表表示的二叉树T int ch =0; scanf("%d",&ch); if(ch == 8) T = NULL; //当输入数字8时表示子树为空 else { if(!(T = (BiTnode *)malloc(sizeof(BiTnode)))) return; T->data = ch; //生成根结点 CreateBiTree(T->lchild); //构造左子树 CreateBiTree(T->rchild); //构造右子树 }}/*(创建二叉树)
void CreateBiTree(BiTree &T)
{//单个生成结点并赋值 printf("输入7个树结点的值:"); T=(BiTree)malloc(sizeof(BiTnode)); BiTree p1=T; BiTree p2=(BiTree)malloc(sizeof(BiTnode)); BiTree p3=(BiTree)malloc(sizeof(BiTnode)); BiTree p4=(BiTree)malloc(sizeof(BiTnode)); BiTree p5=(BiTree)malloc(sizeof(BiTnode)); BiTree p6=(BiTree)malloc(sizeof(BiTnode)); BiTree p7=(BiTree)malloc(sizeof(BiTnode)); scanf("%d",&p1->data);p1->lchild = p2; p1->rchild = p6; scanf("%d",&p2->data);p2->lchild = p3; p2->rchild = p5; scanf("%d",&p3->data);p3->lchild = p4; p3->rchild = NULL; scanf("%d",&p4->data);p4->lchild = NULL; p4->rchild = NULL; scanf("%d",&p5->data);p5->lchild = NULL; p5->rchild = NULL; scanf("%d",&p6->data);p6->lchild = NULL; p6->rchild = p7; scanf("%d",&p7->data);p7->lchild = NULL; p7->rchild =NULL;}*/
void DLR(BiTree T)
{//递归先序遍历二叉树 if(!T) return; else { printf("%d ",T->data); //根结点 DLR(T->lchild); //左子树 DLR(T->rchild); //右子树 }}int SumYe(BiTree T)
{//求二叉树叶结点数之和 if(!T) return 0; if(!T->lchild && !T->rchild ) return 1; return SumYe(T->lchild)+SumYe(T->rchild);}int HightTree(BiTree T)
{//求二叉树高 int hl = 0;//记录左子树高 int hr = 0;//记录右子树高 if(!T) return 0; hl = HightTree(T->lchild); hr = HightTree(T->rchild); return (hl>hr) ? hl+1 : hr+1 ;} int main(void){ int a = 0;//记录二叉树叶结点数之和 int b = 0;//记录二叉树树高 BiTree T; printf("输入二叉树的值:"); CreateBiTree(T); DLR(T); a=SumYe(T); b=HightTree(T); printf("/n%d %d",a,b); return 0;}转载地址:http://ocmvi.baihongyu.com/