程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> URAL 1136 Parliament 二叉樹水題 BST後序遍歷建樹

URAL 1136 Parliament 二叉樹水題 BST後序遍歷建樹

編輯:C++入門知識

二叉樹水題,特別是昨天剛做完二叉樹用中序後序建樹,現在來做這個很快的。

跟昨天那題差不多,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;  
}  
      

#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;
}
	

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved