方法1:
#include <stdio.h>
#include <stdlib.h>
#include "queue.h"
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));
} else {
*p = NULL;
}
}
void display_tree(struct student *head) {
if(head->lchild)display_tree(head->lchild);
printf("%d\t", head->value);
if(head->rchild)display_tree(head->rchild);
}
void display_tree_layer(struct student *head) {
Queue *queue = new Queue;
printf("%d\t", head->value);
if(head->lchild)queue->enqueue(head->lchild);
if(head->rchild)queue->enqueue(head->rchild);
while(!queue->empty()) {
struct student *p = queue->dequeue();
printf("%d\t", p->value);
if(p->lchild)queue->enqueue(p->lchild);
if(p->rchild)queue->enqueue(p->rchild);
}
}
int main()
{
int a[] = {1,2,3,4,9,10,33,56,78,90};
struct student *tree;
arraytotree(a, sizeof(a)/sizeof(a[0]), &tree);
printf("After convert:\n");
display_tree(tree);
printf("\n");
system("pause");
return 0;
}
方法2:
#include <iostream>
using namespace std;
struct BTree
{
int data;
BTree *lchild;
BTree *rchild;
};
bool getBTree(BTree **root, int *a, int &i, const int &Length)
{
if(i < Length)
{
*root = new BTree();
(*root)->data = a[i];
getBTree(&((*root)->lchild),a,++i,Length);
getBTree(&((*root)->rchild),a,++i,Length);
}
else
*root = NULL;
return true;
}
bool showBTree(BTree *root)
{
if(root)
{
cout<<root->data<<" ";
if(showBTree(root->lchild))
if(showBTree(root->rchild)) return true;
return false;
}
else
return true;
}
int main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,0};
BTree *root;
int i = 0, Length = 10;
getBTree(&root,a,i,10);
showBTree(root);
system("pause");
return 0;
}
为何getBTree函数的第一个参数是指针的指针,在使用这个函数的时候,需要给指针的指针才行?暂时想不通……