通过数组,递归创建二叉树

今天我们再讲一个通过数组创建二叉树,很多同学之前可能学的创建二叉树的方法,是通过命令窗口进行输入创建,今天,博主给一段通过数组进行创建二叉树的方法,通过这种方法,可以极大的减少我们的调试时间。

#include<stdio.h>
#include<stdlib.h>

typedef struct Tree {
	int data;
	Tree* lchild;
	Tree* rchild;
}Tree;

int p = 0;
void f(char s[]) {
	int i = 0;
	for (i = 0;; i++) {
		if (s[i] == '$')
			break;
		else
			printf("%c", s[i]);
	}
}
void Create_Tree_recursion(Tree*& T, int a[], int& n) {
	if (a[n] != -1) {
		T = (Tree*)malloc(sizeof(Tree));
		
		T->data = a[n];
		n = n + 1;
		Create_Tree_recursion(T->lchild, a, n);
		Create_Tree_recursion(T->rchild, a, n);
	}
	else {

		n = n + 1;
		
		T = NULL;
	}
}

void pre_order(Tree* T) {
	if (T != NULL) {
		printf("%d ", T->data);
		pre_order(T->lchild);
		pre_order(T->rchild);
	}
}
void recursion(Tree* T, int a[4][4],int r, int c, int& number,int b[]) {
	//printf("rc3 is %d  %d \n", r, c);
	if (T != NULL) {
		if (r >= 4 || c >= 4 || a[r][c] != -1) {
		//	printf("rc1 is %d  %d \n", r, c);
			b[number] = T->data;
			number++;
		}
		else {
			//printf("rc2 s%d  %d \n", r, c);
			a[r][c] = T->data;
		}
		recursion(T->lchild,a,++r,c,number,b);
		recursion(T->rchild, a, --r, ++c,number, b);
	}
}
void init_a(int a[4][4]) {
	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 4; j++)
			a[i][j] = -1;
	}
}

int  main() {
	int data[4][4];
	Tree *T = NULL;
	Tree* T2 = NULL;
	int store[10];
	int number=0;
	int n = 0, r = 0, c = 0;
	int n2 = 0;
	int a[] = {1,2,4,8,10,-1,-1,11,-1,-1,9,-1,-1,5,-1,-1,3,6,-1,-1,7,-1,-1};
	//int b[] = {1,2,-1,-1,3,-1,-1 };
	//T = (Tree*)malloc(sizeof(Tree));
	//T->rchild = NULL;
	//Create_Tree_recursion(T, b, n);
	//pre_order(T);
	Create_Tree_recursion(T2, a, n2);
	pre_order(T2);
	return 0;


}

更多推荐