zoukankan      html  css  js  c++  java
  • 依据二叉树的先序序列和中序序列还原二叉树并打印后序序列

    #include<stdio.h>
    #include<stdlib.h>
    #include<iostream>
    using namespace std;
    
    struct Node
    {
    	int value;
    	Node *left;
    	Node *right;
    	Node(int value)
    	{
    		this->value = value;
    		left = right = NULL;
    	}
    };
    
    bool bNotTree = false;
    Node* RebuildTree(int *preOrder, int *inOrder, int length)
    {
    	if (length <= 0)
    		return NULL;
    	if (length == 1)
    	{
    		if (*preOrder != *inOrder)
    		{
    			bNotTree = true;
    			return NULL;
    		}
    		return new Node(*preOrder);
    	}
    
    	int i;
    	for (i = 0; *preOrder != inOrder[i] && i < length; ++i);
    	if (i == length)
    	{
    		bNotTree = true;
    		return NULL;
    	}
    	Node *root = new Node(*preOrder);
    	root->left = RebuildTree(preOrder+1,inOrder,i);
    	root->right = RebuildTree(preOrder + i + 1, inOrder + i + 1,length-i-1);
    	return root;
    }
    
    void PrintTree(Node* root)
    {
    	if (root)
    	{
    		PrintTree(root->left);
    		PrintTree(root->right);
    		cout << root->value << " ";
    	}
    }
    
    int main()
    {
    	int preOrder[1000];
    	int inOrder[1000];
    
    	int n;
    	while (cin >> n)
    	{
    		int i;
    		bNotTree = false;
    		for (i = 0; i < n; ++i)
    		{
    			cin >> preOrder[i];
    		}
    		for (i = 0; i < n; ++i)
    		{
    			cin >> inOrder[i];
    		}
    		Node *tmp = RebuildTree(preOrder, inOrder, n);
    		if (bNotTree)
    			cout << "No" << endl;
    		else
    		{
    			PrintTree(tmp);
    			cout << endl;
    		}
    	}
    	return 0;
    }

  • 相关阅读:
    【贪心】POJ1017:Packets
    【贪心】POJ2393:Yogurt factory
    【贪心】POJ3190:Stall Reservations
    【递归】地盘划分
    【递归与递推】青蛙过河
    【搜索】POJ1242:Rescue
    单词方阵(dfs)
    反向因子Inverse Factorial
    P1604 B进制星球
    抵制克苏恩(记忆化搜索)
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4387783.html
Copyright © 2011-2022 走看看