王道OnlineJudge 14

题目 

二叉树层次建树就是一层一层的建树,从左到右。随着纵向层次的深入,结点的数量变化规律为:1→2→4→8→16→32。

先画图,然后看图可闭眼写代码 

右边为辅助队列,有多少个二叉树结点,就有多少个辅助队列结点。pcur指针始终指向父亲结点。

二叉树的层次建树

 代码

#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
//二叉树结构
typedef struct BiTNode{
	ElemType c;	//data
	struct BiTNode *left;	//指向BiTNode类型的指针 左孩子
	struct BiTNode *right;	//右孩子
}BiTNode,*BiTree;
//辅助队列结构
typedef struct tag{
	BiTree p;	//指向BiTNode类型的指针
	struct tag *pnext;	//指向tag类型的指针
}tag_t,*ptag_t;

//前序遍历——递归
void PreOrder(BiTree p)
{
	if(p){
		printf("%c",p->c);	//打印根节点
		PreOrder(p->left);	//打印左子树
		PreOrder(p->right);	//打印右子树
	}
}
int main()
{
	//树结构
	BiTree pnew;	//pnew用来指向申请新的树结点
	BiTree tree=NULL;	//tree用来指向树根,代表一颗二叉树
	ElemType c;	//字符类型数据
	//辅助队列结构
	ptag_t phead;	//头指针
    ptag_t ptail;	//尾指针
    ptag_t listpnew;//指向新结点的指针
    ptag_t pcur;	//指向二叉树中父亲结点的指针,用来判断左右孩子是否为空
    phead=ptail=listpnew=pcur=NULL;	//初始化
    while(scanf("%c",&c)){
    	if(c=='\n'){
    		break;
		}
		//calloc申请的空间大小是两个参数直接相乘,并对空间进行初始化,赋值为0
		pnew=(BiTree)calloc(1,sizeof(BiTNode)); //申请一个二叉树结点空间
		pnew->c=c;	//往二叉树结点里放入数据
		listpnew=(ptag_t)calloc(1,sizeof(tag_t));//申请一个辅助队列结点空间,用来依次指向二叉树的每个结点
		listpnew->p=pnew;	//指向二叉树的结点
		//如果是第一个结点
        if(NULL==tree){
            tree=pnew;	//tree指向树的根结点
            phead=ptail=pcur=listpnew; //最开始,所有指针都指向第一个辅助队列结点
        }else{
            //让元素入队
            ptail->pnext=listpnew;
            ptail=listpnew;
            //接下来把b结点放入树中
            if(NULL==pcur->p->left){
                pcur->p->left=pnew;
            }else if(NULL==pcur->p->right){
                pcur->p->right=pnew;
                pcur=pcur->pnext; 	//当前结点左右孩子都有了,pcur就指向下一个
            }
        }
	}
	PreOrder(tree);
	return 0;		
}

run

abcdefghij
abdhiejcfg

相关推荐

  1. C:数据结构王道

    2024-03-14 08:22:03       47 阅读
  2. 王道c语言-选择排序

    2024-03-14 08:22:03       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-14 08:22:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-14 08:22:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-14 08:22:03       87 阅读
  4. Python语言-面向对象

    2024-03-14 08:22:03       96 阅读

热门阅读

  1. 海康抓图保存路径失败NET_DVR_CaptureJPEGPicture

    2024-03-14 08:22:03       59 阅读
  2. js使用canvas实现图片鼠标滚轮放大缩小拖拽预览

    2024-03-14 08:22:03       47 阅读
  3. libigl 网格面片随机赋色

    2024-03-14 08:22:03       46 阅读
  4. 模型的参数量、计算量、延时等的关系

    2024-03-14 08:22:03       38 阅读
  5. C语言(指针)单元练习二

    2024-03-14 08:22:03       33 阅读
  6. C/C++蓝桥杯之解码问题

    2024-03-14 08:22:03       40 阅读
  7. 开窍后的9大表现 别害怕,开窍了你就是黑马

    2024-03-14 08:22:03       53 阅读
  8. Gitea相关漏洞

    2024-03-14 08:22:03       40 阅读