二叉树 排列问题
几天感接触二叉树,有道入门题目没有看懂,
给了 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;
}