二叉树的创建方法,使用递归函数创建。
本文讲解使用递归函数的方法创建二叉树的两种不同代码。
1.使用二级指针创建。
2.使用一级指针创建。
注:不管使用哪种方法,一定要注意函数的递归借口问题。
#include <stdio.h>
#include <iostream>
using namespace std;
#define maxsize 50
struct bi_tree {
char data;
bi_tree* left, * right;
};
//不使用二级指针创建二叉树的方法
bi_tree* create_bi_tree() {
bi_tree* p;
char data;
cin >> data;
if (data == '#') {
p = NULL;
}
else {
p = (bi_tree*)malloc(sizeof(bi_tree));
if (p == NULL) {
cout << "内存分配失败!" << endl;
exit(-1);
}
p->data = data;
p->left = create_bi_tree();
p->right = create_bi_tree();
}
//将创建好的二叉树节点发射出去
return p;
}
//使用二级指针进行创建二叉树
bi_tree** create_bi_bi_tree(bi_tree **p) {
char data;
cin >> data;
//如果数据为#则将节点置空。
if (data == '#') {
return NULL;
}
else {
//使用解引用得到一级指针,并分配空间给一级指针
*p = (bi_tree*)malloc(sizeof(bi_tree));
//判断系统是否成功的分配空间给节点
if (*p == NULL) {
cout << "内存分配失败!" << endl;
exit(-1);
}
//注意括号内的表达式,先将p指针解引用,得到的一级指针再找到其结构体里面的left指针。
//因为递归函数需要的是二级指针,所以将left指针取地址并传入递归函数。
create_bi_bi_tree(&((*p)->left));
//性质同上
create_bi_bi_tree(&((*p)->right));
}
return p;
}
int main() {
bi_tree* p = create_bi_tree();
return 0;
}