zoukankan      html  css  js  c++  java
  • Falling Leaves

    http://poj.org/problem?id=1577

    View Code
    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>
    typedef struct BiTree
    {
    
        char ch;
        struct BiTree *lchild;
        struct BiTree *rchild;
    }BiTree;
    
    
    BiTree *createBiTree(char ch)
    {
        BiTree *leaf = (BiTree *)malloc(sizeof(BiTree));
        leaf->ch = ch;
        leaf->lchild = NULL;
        leaf->rchild = NULL;
        return leaf;
    }
    BiTree *insertBiTree(BiTree *root, char ch)
    {
        BiTree *leaf = root;
    
        if(root == NULL)
        {
            root = createBiTree(ch);
            return root;
        }
    
        while(leaf)
        {
            if((leaf->ch) > ch)
            {
                if(leaf->lchild == NULL)
                {
                    leaf->lchild = createBiTree(ch);
                    break;
                }
                else
                {
                    leaf = leaf->lchild;
                }
            }
            else  if((leaf->ch) < ch)
            {
                if(leaf->rchild == NULL)
                {
                    leaf->rchild = createBiTree(ch);
                    break;
                }
                else
                {
                    leaf = leaf->rchild;
                }
            }
        }
    
        return root;
    }
    
    void preorder(BiTree *root)
    {
        if(root!=NULL)
        {
            printf("%c", root->ch) ;
            preorder(root->lchild) ;
            preorder(root->rchild) ;
        }
    
    }
    
    int main()
    {
        char str[50], p[10000];
        int length;
        int i;
        BiTree *root = NULL;
    
    
        while(1)
        {
            scanf("%s", str);
            if(strcmp(str, "*") == 0 || strcmp(str, "$") == 0)
            {
                length = strlen(p);
                for(i = length-1; i >= 0; i--)
                {
                   root = insertBiTree(root, p[i]);
                }
                preorder(root);
                printf("\n");
                if(strcmp(str, "$") == 0)  break;
                root = NULL;
                memset(p, '\0', sizeof(p));
    
            }
            else
            {
                strcat(p, str);
            }
        }
    
        return 0;
    }

    题目大意:按照题目给出的叶子顺序,找出原来的二叉排序树。

    解:按照题目给出的顺序,倒过来插入到二叉排序树中即可构造原来的树。

  • 相关阅读:
    java算法--循环队列
    java算法--普通队列
    java算法--稀疏数组
    HelloWorld
    css
    自定义事件并且主动触发
    数组字符串操作
    进阶路上有你我-相互相持篇之ES6里箭头函数里的this指向问题
    关于一道面试题
    异步函数回调
  • 原文地址:https://www.cnblogs.com/yelan/p/2994224.html
Copyright © 2011-2022 走看看