node_t * init_char_node(char c, unsigned int cnt) {
	char_count * data;
	data = malloc(sizeof *data);
	data->c = c;
	data->cnt = cnt;
	return tree_init_node(data);
}
Beispiel #2
0
int main(void) {
	int _data[] = {1,2,3,4,5,6,7,8,9};
	int * data = _data;

	tree_t * tree = tree_init();
	node_t * node1 = tree_init_node(data+0);
	node_t * node2 = tree_init_node(data+1);
	node_t * node3 = tree_init_node(data+2);
	node_t * node4 = tree_init_node(data+3);
	node_t * node5 = tree_init_node(data+4);
	node_t * node6 = tree_init_node(data+5);
	node_t * node7 = tree_init_node(data+6);
	node_t * node8 = tree_init_node(data+7);
	node_t * node9 = tree_init_node(data+8);

	tree->root = node5;
	node5->left = node2;
	node2->left = node1;
	node2->right = node3;
	node3->right = node4;
	node5->right = node8;
	node8->left = node7;
	node7->left = node6;
	node8->right = node9;

	/* uh what if ... one of the nodes is an ancestor*/
	int tests[6][3] = { {6,9,8}, {1,4,2}, {5,6,5}, {5,5,5}, {1,1,1}, {1,9,5} }; 
	int c;	
	int ret;
	for (int i = 0; i < 6; ++i) { 	
		ret = lca(tree, tests[i][0], tests[i][1], &c) ;
		if ( ret != 0 ) {
			printf("lca(%d,%d) returned %d\n", tests[i][0], tests[i][1], ret);
			return -1;
		} else if ( c != tests[i][2] ) {
			printf("lca(%d,%d) != %d\n",tests[i][0], tests[i][1], tests[i][2]);
			return -1;
		}
	}

	return 0;
}
Beispiel #3
0
//前序构建二叉树
void tree_create_preamble(s_node *p_node, int left_right, s_node **node, void ***p)
{
	if (p == null)
	{
		return;
	}
	//遇到空指针返回
	if (**p == null)
	{
		return;
	}

	//创建新节点
	*node = (s_node *) malloc(sizeof(s_node));
	tree_init_node(*node, **p);

	//设置父节点
	(*node)->parent = p_node;
	if (p_node != null)
	{
		//设置父节点的左孩子
		if (left_right == 0)
		{
			p_node->left_child = *node;
		}
		//设置父节点的右孩子
		else if (left_right == 1)
		{
			p_node->right_child = *node;
		}
	}

	//下一个数据地址
	(*p)++;
	//构建左子树
	tree_create_preamble(*node, 0, &((*node)->left_child), p);

	//下一个数据地址
	(*p)++;
	//构建右子树
	tree_create_preamble(*node, 1, &((*node)->right_child), p);

}