二叉树的层次建树

二叉树的层次建树

概念

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

算法思路

需要用到一个辅助队列,我们将当前的父节点保存在辅助队列中,用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
在这里插入图片描述

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

猜你喜欢

转载自blog.csdn.net/L6666688888/article/details/128704180
今日推荐