怎样编写一个程序,把一个有序整数数组放到二叉树中(按行输出)

来源:互联网 发布:东兴证券交易软件下载 编辑:程序博客网 时间:2024/06/08 01:30

 

方法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;}elsereturn 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函数的第一个参数是指针的指针,在使用这个函数的时候,需要给指针的指针才行?暂时想不通……



	
				
		
原创粉丝点击