通过数组,递归创建二叉树
·
通过数组,递归创建二叉树
今天我们再讲一个通过数组创建二叉树,很多同学之前可能学的创建二叉树的方法,是通过命令窗口进行输入创建,今天,博主给一段通过数组进行创建二叉树的方法,通过这种方法,可以极大的减少我们的调试时间。
#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;
}
更多推荐


所有评论(0)