uva 548 Tree

简介: 点击打开链接uva 548 思路: 二叉树 分析: 1 题目给定一棵二叉树的中序序列和后序序列求这个二叉树里面,根节点到叶子节点的最短路径的叶子节点的值,如果有多条路径输出最小的叶子节点 2 题目说最多有10000个节点,但是由于题目所说...

点击打开链接uva 548

思路: 二叉树
分析:
1 题目给定一棵二叉树的中序序列和后序序列求这个二叉树里面,根节点到叶子节点的最短路径的叶子节点的值,如果有多条路径输出最小的叶子节点
2 题目说最多有10000个节点,但是由于题目所说的二叉树并不是完全二叉树,所以这里建立二叉树并不能够利用静态的思想,应该要利用动态的增加
3 建立了二叉树之后,只要按照前序遍历的思路即可求出ans

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int INF = 1<<30;
const int MAXN = 1000010;

struct Node{
    int x;
    Node *left;
    Node *right;
    Node(int x){
        this->x = x;
        this->left = NULL;
        this->right = NULL;
    }
};
Node *root;

char str[MAXN];
int nodeNum , ans , maxNum , stepNum;
int midOrder[MAXN] , postOrder[MAXN];

void getOrder(int *arr){
    int len = strlen(str);
    nodeNum = 0;
    for(int i = 0 ; i < len ; i++){
        int j = i;
        int num = 0;
        while(str[j] != ' ' && j < len){
            num = num*10 + str[j]-'0';
            j++;
        }
        arr[nodeNum++] = num;
        i = j;
    }
}

Node* createTree(int *mid , int *post , int len){
    if(len == 0)
        return NULL;
    int k = 0;
    while(mid[k] != post[len-1])
        k++;
    Node *root = new Node(post[len-1]);
    // 左子树
    root->left = createTree(mid , post , k); 
    // 右子树
    root->right = createTree(mid+k+1 , post+k , len-k-1); 
    return root;
}

void solve(int sum , int step , Node *node){
    if(node != NULL){
        if(node->left == NULL && node->right == NULL){
            if(maxNum > sum+node->x){
                maxNum = sum+node->x; 
                ans = node->x; 
            }   
            else if(maxNum == sum+node->x)
                ans = min(ans , node->x);
        }
        solve(sum+node->x , step+1 , node->left);
        solve(sum+node->x , step+1 , node->right);
    }
}    

int main(){
    while(gets(str)){ 
        getOrder(midOrder); 
        gets(str);
        getOrder(postOrder);

        root = createTree(midOrder , postOrder , nodeNum);
        maxNum = ans = INF;
        solve(0 , 0 , root);
        printf("%d\n" , ans);
    } 
    return 0;
}



目录
相关文章
|
机器学习/深度学习 人工智能 编解码
水果软件flstudio设置成中文版本的操作步骤
再也用不着给编曲软件FL Studio安装汉化补丁了,今天FL Studio官方不声不响地悄悄更新了FL Studio 20中文版,但一些朋友装完Mac中文版后发现还是英文版,这是怎么回事呢?今天就俩讲一讲正确安装并设置FL中文版的方法。
2314 0
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
600 4
|
消息中间件 Java Kafka
【Kafka】微服务学习笔记九:什么是消息中间件&Kafka的介绍及使用
主要介绍什么是消息中间件以及Kafka在Docker上的安装配置及使用,最后还涉及到Kafka高级部分的备份机制。
1416 98
【Kafka】微服务学习笔记九:什么是消息中间件&Kafka的介绍及使用
|
Ubuntu
ubuntu 配置 apt 使用代理
ubuntu 配置 apt 使用代理 仅配置系统代理是无法使 apt 也使用代理的,我们需要给 apt 独立配置代理。 方法 ubuntu 官方说明 :https://help.ubuntu.com/community/AptGet/Howto#Setting_up_apt-get_to_use_a_http-proxy 创建 /etc/apt/apt.
3943 0
|
编解码
win10笔记本外接显示器后,微信界面字体模糊问题的解决方案
win10笔记本外接显示器后,微信界面字体模糊问题的解决方案
2268 0
win10笔记本外接显示器后,微信界面字体模糊问题的解决方案
|
资源调度 监控 Shell
yarn kill 命令(命令vs脚本)
yarn kill 命令(命令vs脚本)
yarn kill 命令(命令vs脚本)
|
数据安全/隐私保护
记录一下百度网盘双击无法正常启动以及解决办法
记录一下百度网盘双击无法正常启动以及解决办法
1798 0
|
存储 SQL NoSQL
【面试必备】非关系数据库的优缺点及四大分类
【面试必备】非关系数据库的优缺点及四大分类
1137 0
|
测试技术
如何使用云效看板,让需求持续快速地流动和交付
云效看板支持看板方法标准实践,帮助团队更好的协作和管理交付过程。通过云效看板功能可以帮助团队: 更好地可视化端到端价值(需求)流动,确保产品、开发、测试等职能的前后拉通;支持任务按所属模块或不同端展开为子列,确保不同模块或不同端任务向所属的需求对齐;明确定义各列的流转规则,确保在交付过程中内建质量;限制各列工作项的并行数目,促进需求的快速持续交付;凸显交付过程中的问题、瓶颈和阻碍项,让团队聚焦应该关注的问题等。
12105 10