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;
    }

  • 相关阅读:
    CentOS6.5安装Qt4.8.6+QtCreator2.6.1
    利用C++调用天气webservice-gSOAP方法
    win7_32下编译FFmpeg
    CentOS下yum安装FFmpeg
    Windows下编译live555源码
    live555笔记_hi3516A
    大公司都有哪些开源项目~~~阿里,百度,腾讯,360,新浪,网易,小米等
    置顶博客
    Linux之GDB学习
    Linux之RTOS学习
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4387783.html
Copyright © 2011-2022 走看看