分析:本题考察二叉搜索树的建树方法,简单的递归结构。
关于树的算法设计一定要联想到递归,因为树本身就是递归的定义。
而学会把递归改称非递归也是一种必要的技术。
毕竟,递归会造成栈溢出,关于系统底层的程序中不到非不得以最好不要用。
但是对某些数学问题,就一定要学会用递归去解决。
#include <iostream>
using namespace std;
struct student
{
int value;
struct student* lchild;
struct student* rchild;
};
void arraytotree(int a[], int len, struct student **p)
{
if (len)
{
*p = (struct student *)malloc(sizeof(struct student));
(*p)->value = a[len/2];
arraytotree(a, len/2, &(*p)->lchild);
arraytotree(a+len/2+1, len-len/2-1, &(*p)->rchild); //此处注意a+len/2+1
}
else
{
*p = NULL;
return;
}
}
void display_Tree(struct student **head)
{
if (*head != NULL)
{
display_Tree(&(*head)->lchild);
printf("%d\t",(*head)->value);
display_Tree(&(*head)->rchild);
}
else
return;
}
int main()
{
int a[] = {1, 2, 3, 4, 9, 13, 16, 18};
int len = sizeof(a)/sizeof(a[0]);
student* root;
arraytotree(a, len, &root);
display_Tree(&root);
}