读书人

二叉树 排列有关问题

发布时间: 2013-11-13 14:04:18 作者: rapoo

二叉树 排列问题
几天感接触二叉树,有道入门题目没有看懂,

给了 4,7,10,3,5,9,1,6 这个数
让我 exhibit a binary tree that when traversed in inorder, outputs the list in ascending order .

该如何入手? 谢谢知道
二叉树
[解决办法]
参考一下:

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>


typedef struct binary_tree bitree_t;
typedef char btelem_t;
typedef void (*visitor_t)(bitree_t *);

struct binary_tree {
bitree_t* l;
bitree_t* r;
btelem_t e;
};


#define NIL_ELEM(e) ((e) == ' ')


// create binary with in-order way.
void create_bitree(bitree_t** root, const btelem_t** elems, int* elemnum)
{
if (*elemnum == 0) return; // no more elements

if (NIL_ELEM(**elems)) {
*root = NULL;
(*elems)++; (*elemnum)--;
} else {
// m-node
*root = (bitree_t*)malloc(sizeof(bitree_t));
(*root)->e = *(*elems)++; (*elemnum)--;
// (l, r)-nodes
create_bitree(&((*root)->l), elems, elemnum); // l-tree
create_bitree(&((*root)->r), elems, elemnum); // r-tree
}
}

void preorder(bitree_t* root, visitor_t visitor)
{
if (root == NULL) {
//if (visitor) visitor(root);
return;
}

if (visitor) visitor(root);
preorder(root->l, visitor);
preorder(root->r, visitor);
}

void inorder(bitree_t* root, visitor_t visitor)
{
if (root == NULL) return;

inorder(root->l, visitor);
if (visitor) visitor(root);
inorder(root->r, visitor);
}

void postorder(bitree_t* root, visitor_t visitor)
{
if (root == NULL) return;

postorder(root->l, visitor);
postorder(root->r, visitor);
if (visitor) visitor(root);
}



void print_node(bitree_t *node)
{
if (node == NULL) return;

putchar(node->e);

//putchar(node ? node->e : ' ');
}



int main(void)
{
bitree_t *root = NULL;
btelem_t *elems = "ABD CE F ";
size_t elemnum = strlen(elems);
visitor_t visitor = print_node;

create_bitree(&root, &elems, &elemnum);

printf("pre-order: ");
preorder(root, visitor);
putchar('\n');

printf("in-order: ");
inorder(root, visitor);
putchar('\n');

printf("post-order: ");
postorder(root, visitor);
putchar('\n');

getch();
return 0;
}

读书人网 >C++

热点推荐