木其网络科技专业程序员代写http://www.xmsydw.com
程序员学历擅长经验网店链接
apenny硕士ASP.NET PHP 电子 通信设计 图像 编程 网络5年进入店铺
zheng_qianqian本科C语言 C++面向对象 Java5年进入店铺
guoguanl本科Java Web项目 JSP Hibernate Struts Mysql5年进入店铺

URAL 1136 Parliament 二叉树水题 BST后序遍历建树

二叉树水题,特别是昨天刚做完二叉树用中序后序建树,现在来做这个很快的。

跟昨天那题差不多,BST后序遍历的特型,找到最后那个数就是根,向前找,比它小的那块就是他的左儿子,比它大的那块就是右儿子,然后递归儿子继续建树。


代码:


#include <cstdio>
#include <cstdlib>
const int maxn = 70000;

struct Node {
	int v;
	Node *l;
	Node *r;
};
int arr[maxn];
bool flag = false;

Node* addnode(int s, int e) {
	if (s > e)
		return NULL;
	Node* u = (Node*) malloc (sizeof(Node*));
	u->v = arr[e];
	if (s == e) {
		u->r = u->l = NULL;
		return u;
	}
	int i;
	for (i = e - 1; i >= s; i--)
		if (arr[i] < arr[e])
			break;
	u->l = addnode(s, i);
	u->r = addnode(i + 1, e - 1);
	return u;
}

void output(Node* u) {
	if (u->r != NULL)
		output(u->r);
	if (u->l != NULL)
		output(u->l);
	if (flag)
		printf(" ");
	flag = true;
	printf("%d", u->v);
}

int main() {
	int n;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
		scanf("%d", &arr[i]);
	Node* root = addnode(1, n);
	output(root);
	printf("\n");
	return 0;
}
	




posted @ 2013-07-09 01:21  程序流程图  阅读(188)  评论(0)    收藏  举报
木其网络科技专业程序员代写http://www.xmsydw.com
程序员学历擅长经验网店链接
apenny硕士ASP.NET PHP 电子 通信设计 图像 编程 网络5年进入店铺
zheng_qianqian本科C语言 C++面向对象 Java5年进入店铺
guoguanl本科Java Web项目 JSP Hibernate Struts Mysql5年进入店铺