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; }