二叉树的层次建树

二叉树的层次建树

概念

层次建树即为从上到下,从左到右的进行建树。

算法思路

需要用到一个辅助队列,我们将当前的父节点保存在辅助队列中,用qcur保存。每次进入一个新结点,我们先将他加入辅助队列,然后判断辅助队列中pcur保存的树结点左孩子是否为空,如果为空,那么将新的树结点,加入他的左孩子,如果右结点为空,将树结点加入右孩子,然后我们需要把pcur向前移动,这样就能实现层次建树。

代码

#include<stdio.h>
#include<stdlib.h>
#define maxSize 5

typedef char Elemtype;

typedef struct Tree{
	Elemtype c;
	struct Tree *left;
	struct Tree *right;
}Tree,*BiTree;

typedef struct tag_t{
	BiTree t;
	struct tag_t *next;
}*qtag_t,tag_t;

int main(){ 	
	BiTree tree = NULL,tnew;
	char c;
	qtag_t qcur = NULL,qtail = NULL,qhead = NULL,qnew = NULL;
	while(scanf("%c",&c)){
		if('\n'==c){
			break;
		}
		tnew = (BiTree)calloc(1,sizeof(Tree));
		tnew->c = c;
		qnew = (qtag_t)calloc(1,sizeof(tag_t));
		qnew->t = tnew;
		if(NULL==tree){
			qhead = qnew;
			qtail = qnew;
			qcur = qnew;
			tree = tnew;
		}else{
			qtail->next = qnew;
			qtail = qnew;
			if(NULL==qcur->t->left){
				qcur->t->left = tnew;
			}else if(NULL==qcur->t->right){
				qcur->t->right = tnew;
				qcur = qcur->next;
			}
		}
	}
	return 0;
}

可通过debug查看tree的后继来检验代码是否正确,这里我们输入abcdefghij
在这里插入图片描述

结果如下
在这里插入图片描述


版权声明:本文为L6666688888原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。