#include <iostream> using namespace std; typedef struct Node { int data; struct Node* lchild; struct Node* rchild; }Node, *pNode; bool used[100]; void minHeightTree(pNode head, int* src, int start, int end) { if (start == end) { return; } int mid = (start + end) / 2; pNode p = new Node; if (used[mid] && mid < end && used[mid+1] < end) { mid++; } if (used[mid]) { return; } p->data = src[mid]; p->lchild = p->rchild = NULL; used[mid] = true; if (!head->lchild && p->data < head->data) { head->lchild = p; } else if(!head->rchild && p->data > head->data) { head->rchild = p; } minHeightTree(p, src, start, mid); minHeightTree(p, src, mid, end); } void printTree(pNode head) { if (!head) { return; } cout<<head->data<<endl; if (head->lchild) { cout<<head->data<<"lchild:"; printTree(head->lchild); } if (head->rchild) { cout<<head->data<<"rchild:"; printTree(head->rchild); } } int main(void) { int src[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int len = sizeof(src) / sizeof(int); pNode head = new Node; head->lchild = head->rchild = NULL; memset(used, false, sizeof(used)); minHeightTree(head, src, 0, len - 1); printTree(head); return 0; }