根據二叉樹的先序序列和中序序列還原二叉樹並列印後序序列
#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;
}
相關文章
- 由中序序列和先序序列確定一顆二叉樹二叉樹
- 先序、中序、後序序列的二叉樹構造演算法二叉樹演算法
- 根據前序遍歷序列、中序遍歷序列,重建二叉樹二叉樹
- 還原二叉樹(先序+中序-〉後序)二叉樹
- 【LeetCode】Construct Binary Tree from Preorder and Inorder Traversal 根據先序序列和中序序列恢復二叉樹LeetCodeStruct二叉樹
- (樹)根據中序後序構建二叉樹二叉樹
- 從中序與後序遍歷序列構造二叉樹二叉樹
- 二叉樹先知道後序和中序,求先序二叉樹
- 已知二叉樹的先序和後序求任意一中序二叉樹
- 二叉樹 前序、中序、後序二叉樹
- 二叉樹的四種遍歷方法:先序,中序,後序,層序二叉樹
- 演算法 -- 實現二叉樹先序,中序和後序遍歷演算法二叉樹
- 遞迴和迭代實現二叉樹先序、中序、後序和層序遍歷遞迴二叉樹
- 二叉樹的先,中,後序遍歷二叉樹
- 二叉樹的先中後序遍歷二叉樹
- 106. 從中序與後序遍歷序列構造二叉樹——Java實現二叉樹Java
- LeetCode-106-從中序與後序遍歷序列構造二叉樹LeetCode二叉樹
- 非遞迴遍歷二叉樹的四種策略-先序、中序、後序和層序遞迴二叉樹
- 【二叉樹】前中序求後序,中後序求前序二叉樹
- 用數學歸納法證明前序序列和中序序列唯一的確定一個二叉樹序列二叉樹
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- 二叉樹中序和後序遍歷表示式二叉樹
- 889. 根據前序和後序遍歷構造二叉樹二叉樹
- 二叉樹 ---- 前序 中序 後序 知二求一二叉樹
- 二叉樹的前序、中序、後序三種遍歷二叉樹
- 二叉樹--後序遍歷二叉樹
- 二叉樹的前序、中序、後序的遞迴和迭代實現二叉樹遞迴
- 【劍指offer】【4】根據前序和中序結果,重建二叉樹二叉樹
- 判斷整數序列是不是二叉查詢樹的後序遍歷結果
- 二叉樹的前序,中序,後序遍歷方法總結二叉樹
- 資料結構實驗之二叉樹八:(中序後序)求二叉樹的深度資料結構二叉樹
- 二叉樹的前中後序遍歷二叉樹
- 【根據前序和中序遍歷構造二叉樹】棧+迭代 || 遞迴二叉樹遞迴
- 序列化二叉樹二叉樹
- LeetCode 105. 從前序與中序遍歷序列構造二叉樹LeetCode二叉樹
- LeetCode-105-從前序與中序遍歷序列構造二叉樹LeetCode二叉樹
- Leetcode 889. 根據前序和後序遍歷構造二叉樹LeetCode二叉樹
- 【演算法】二叉樹、N叉樹先序、中序、後序、BFS、DFS遍歷的遞迴和迭代實現記錄(Java版)演算法二叉樹遞迴Java