#include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct bnode { int data; struct bnode *lc; struct bnode *rc; }bnode; void creat(bnode *proot) { bnode *p,*q; int k,n,i; proot=NULL;//初始化空树 printf("输入二叉树的节点元素个数n:");//输入数据元素个数 scanf("%d",&n); for(i=0;i<n;i++) { p=(bnode*)malloc(sizeof(bnode)); if(p == NULL) {//检查分配内存是否成功 printf("树满\n"); exit(1);} p->lc=NULL; p->rc=NULL; printf("k="); scanf("%d",&k); if(proot==NULL) proot=p; else {q=proot; while(q!=NULL) {if(q->data>k) if(q->lc!=NULL) q=q->lc; else {q->lc=p; q=NULL; } else if(q->rc!=NULL) q=q->rc; else {q->rc=p; q=NULL; } } } } } void visit(bnode *proot) { bnode *temp=proot->lc; proot->lc=proot->rc; proot->rc=temp; } int preorder(bnode *proot)//递归遍历 {if(proot==NULL) print("xxx\n"); return; { printf("%d",proot->data); if(proot->lc!=NULL) preorder(proot->lc); if(proot->rc!=NULL); preorder(proot->rc); } } void print(bnode *proot) { int level = -1; //记录是第几层次 int i; if (NULL == proot) return; level++; print(proot->rc); level--; level++; for (i = 0; i < level; i++) printf("\t"); printf("%d\n", proot->data); print(proot->lc); level--; } int main() { bnode *proot=NULL; creat(proot); preorder(proot); print(proot); return 0; }
时间: 2024-04-02 08:34:53 浏览: 78
C标准库函数集
5星 · 资源好评率100%
这段代码实现了二叉树的创建和遍历,并且还包括了一个函数用于翻转二叉树。具体来说,这个程序定义了一个结构体bnode,其中包含了节点值和左右子树的指针。接着,使用creat函数创建了二叉树,该函数通过输入节点元素个数n和节点的值k,动态分配内存创建节点,并将它们插入到二叉树中。接着,使用preorder函数递归遍历二叉树,输出节点的值。最后,使用print函数按照中序遍历的方式输出二叉树的结构。值得注意的是,print函数在输出节点值之前先输出了一个制表符,以此来表示节点的层次。
阅读全文