现在的位置: 首页 > 综合 > 正文

86 怎样编写一个程序,把一个有序整数数组放到二叉树中

2018年01月20日 ⁄ 综合 ⁄ 共 1492字 ⁄ 字号 评论关闭

86.
怎样编写一个程序,把一个有序整数数组放到二叉树中?
分析:本题考察二叉搜索树的建树方法,简单的递归结构。关于树的算法设计一定要联想到
递归,因为树本身就是递归的定义。而,学会把递归改称非递归也是一种必要的技术。毕竟,
递归会造成栈溢出,关于系统底层的程序中不到非不得以最好不要用。但是对某些数学问题,
就一定要学会用递归去解决。

/*
86.
怎样编写一个程序,把一个有序整数数组放到二叉树中?
分析:本题考察二叉搜索树的建树方法,简单的递归结构。关于树的算法设计一定要联想到
递归,因为树本身就是递归的定义。而,学会把递归改称非递归也是一种必要的技术。毕竟,
递归会造成栈溢出,关于系统底层的程序中不到非不得以最好不要用。但是对某些数学问题,
就一定要学会用递归去解决。

有序的,直接中间分开 左右子树建立递归 
*/
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
#define N 101
struct  Node{
	int data;
	struct Node *left,*right;
}; 


Node* bulidTree(int array[], int start, int end) 
{
	if (start>end) 
		return NULL;
	int m=(start+end)/2;
	Node *root=(Node*)malloc(sizeof(Node));
	root->data=array[m];
	root->left=bulidTree(array,start,m-1);
	root->right=bulidTree(array,m+1,end);
	return root;
} 

// 中序遍历 左根右 
void displayTreeMid(Node *head) 
{
	if(head->left)
		displayTreeMid(head->left);
	printf("%d ",head->data);
	if(head->right)
		displayTreeMid(head->right);
}
// 前序遍历 根左右 
void displayTreeFore(Node *head) 
{
	printf("%d ",head->data);
	if(head->left)
		displayTreeFore(head->left);
	if(head->right)
		displayTreeFore(head->right);
}

// 后序遍历 左右根 
void displayTreeBack(Node *head) 
{
	if(head->left)
		displayTreeBack(head->left);
	if(head->right)
		displayTreeBack(head->right);
	printf("%d ",head->data);
}

int main()
{
	/*
			  5
		  2	     7
		1  3   6  8
		    4      9
	中序遍历:1 2 3 4 5 6 7 8 9
	前序遍历:5 2 1 3 4 7 6 8 9
	后序遍历:1 4 3 2 6 9 8 7 5
	*/
	int array[]={1,2,3,4,5,6,7,8,9};
	Node *root;
	root=bulidTree(array,0,sizeof(array)/sizeof(int)-1);
	printf("中序遍历:");
	displayTreeMid(root);
	printf("\n");
	 
	printf("前序遍历:");
	displayTreeFore(root);
	printf("\n");
	
	printf("后序遍历:");
	displayTreeBack(root);
	printf("\n");
	return 0;
} 

抱歉!评论已关闭.