zoukankan      html  css  js  c++  java
  • POJ 1577 Falling Leaves (子母二叉树,给出叶子节点的删除序列,求前序遍历)

    题意:给出一棵字母二叉树删除叶子节点的序列,按删除的顺序排列。让你输出该棵二叉树额前序遍历的序列。
    思路:先把一棵树的所有删除的叶子节点序列存储下来,然后从最后一行字符串开始建树即可,最后遍历输出。
        这里为方便起见,将子母转化成整数值存储。

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    /*
    AC
    题意:给出一棵字母二叉树删除叶子节点的序列,按删除的顺序排列。让你输出该棵二叉树额前序遍历的序列。
    思路:先把一棵树的所有删除的叶子节点序列存储下来,然后从最后一行字符串开始建树即可,最后遍历输出。
        这里为方便起见,将子母转化成整数值存储。
    */
    using namespace std;
    const int maxn=30;
    char str[30][30];
    
    struct node{
        int l,r; //左儿子的值、右儿子的值。若值为-1,表示不存在左/右儿子。
    }node[maxn];
    
    void dfs(int u,int v){
        if(v<u){
            //当u没有左儿子时,v赋值给u的左儿子,否则递归u的左儿子
            if(node[u].l==-1){
                node[u].l=v;
                return;
            }
            else{
                dfs(node[u].l,v);
            }
        }
        else{
            //当u没有右儿子时,v赋值给u的右儿子,否则递归u的右儿子
            if(node[u].r==-1){
                node[u].r=v;
                return;
            }
            else{
                dfs(node[u].r,v);
            }
        }
    }
    void dlr_print(int u){
        if(node[u].l==-1&&node[u].r==-1){
            printf("%c",u+'A');
            return;
        }
        printf("%c",u+'A');
        if(node[u].l!=-1)
            dlr_print(node[u].l);
        if(node[u].r!=-1)
            dlr_print(node[u].r);
    }
    int main()
    {
        int m,u,v;
        while(scanf("%s",str[0])!=EOF){
            for(int i=0;i<maxn;i++){
                node[i].l=node[i].r=-1;
            }
            m=1;
            while(1){
                scanf("%s",str[m]);
                if(str[m][0]=='*' || str[m][0]=='$')
                    break;
                m++;
            }
            int rootval=str[m-1][0]-'A';  //根节点的值。
            for(int i=m-2;i>=0;i--){
                for(int j=0;str[i][j]!='';j++){
                    v=str[i][j]-'A';
                    dfs(rootval,v);
                }
            }
            //前序遍历输出
            dlr_print(rootval);
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    google搜索的使用小窍门
    openssl的使用
    vi vim 的使用
    nfs
    setfacl命令的使用
    JAVA记录
    Yapi基本使用
    Yapi部署
    Mysql问题记录
    Spring boot+MYSQL多数据源
  • 原文地址:https://www.cnblogs.com/chenxiwenruo/p/3349627.html
Copyright © 2011-2022 走看看