zoukankan      html  css  js  c++  java
  • POJ 2255 Tree Recovery 二叉树恢复

    一道和Leetcode的一道题目基本上一样的题目。

    给出前序遍历和中序遍历序列,要求依据这些信息恢复一颗二叉树的原貌,然后按后序遍历序列输出。

    Leetcode上有给出后序和中序,恢复二叉树的。

    只是事实上算法都是一样的。仿佛又回到了做Leetcode题的那段岁月中了。

    还有就是输入是我特别处理过的,就两个函数,大家会了的无视,不会的能够学习下。

    #include <stdio.h>
    #include <string>
    #include <algorithm>
    using std::string;
    
    const int MAX_B = 1024;
    char buf[MAX_B];
    int id = 0, len = 0;
    
    inline char getFromBuf()
    {
    	if (id >= len)
    	{
    		len = fread(buf, 1, MAX_B, stdin);
    		id = 0;
    	}
    	return buf[id++];
    }
    
    void getStrFromBuf(string &n)
    {
    	char a = getFromBuf();
    	while ((a == ' ' || a == '
    ') && len) a = getFromBuf();
    	
    	n.clear();
    	while ((a != ' ' && a != '
    ') && len)//老是写&&,错成||
    	{
    		n.push_back(a);
    		a = getFromBuf();
    	}
    }
    
    struct Node
    {
    	char alpha;
    	Node *left, *right;
    	explicit Node (char a = ' ') : alpha(a), left(NULL), right(NULL) {}
    };
    
    Node *recover(string &preo, int p1, int p2, string &ino, int i1, int i2)
    {
    	if (p1 > p2) return NULL;
    	Node *root = new Node(preo[p1]);
    
    	int off = 0;
    	for ( ; ino[i1+off] != preo[p1]; off++);
    
    	root->left = recover(preo, p1+1, p1+off, ino, i1, i1+off-1);
    	root->right = recover(preo, p1+off+1, p2, ino, i1+off+1, i2);
    	return root;
    }
    
    void releaAndPrintTree(Node *r)
    {
    	if (r)
    	{
    		releaAndPrintTree(r->left);
    		releaAndPrintTree(r->right);
    		putchar(r->alpha);
    		delete r; r = NULL;
    	}
    }
    
    int main()
    {
    	string preo, ino;
    	while (true)
    	{
    		getStrFromBuf(preo);
    		if (len == 0) break;
    		getStrFromBuf(ino);
    		releaAndPrintTree(recover(preo, 0, (int)preo.size()-1, ino, 0, (int)ino.size()-1));
    		putchar('
    ');
    	}
    	return 0;
    }



  • 相关阅读:
    关于MIME类型问题,浏览器请求到的资源是乱码
    关于vue切换用户,路由表不更新问题
    Flutter环境安装,ios真机调试
    vue使用trackingjs
    js的中文英文排序
    google无法播放mp4 chrome无法播放h264
    写在Blog前
    NOI2010Day1
    菜鸡KLC的中考游记
    ABC161 题解
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4297319.html
Copyright © 2011-2022 走看看