二叉树的恢复

来源:互联网 发布:加百列和路西法知乎 编辑:程序博客网 时间:2024/05/18 01:13

一、已知前序和中序求后序
已知前序的第一个节点为根节点,设为root,start设为当前二叉树的最左边的节点,end为当前二叉树最右边的节点。

#include<iostream>using namespace std;int pre[] = { 1, 2, 3, 4, 5, 6 };int in[] = { 3, 2, 4, 1, 6, 5 };void post(int root, int start, int end) {    if (start > end)return;    int i = start;    while (i < end&&in[i] != pre[root])i++;    post(root + 1, start, i - 1);    post(root + 1 + i - start, i + 1, end);    cout << pre[root] << " ";}int main(){    post(0, 0, 5);    return 0;}

二、已知后序和中序求前序

#include<iostream>using namespace std;int last[6] = { 3,4,2,6,5,1 };int in[6] = { 3,2,4,1,6,5 };void levelorder(int root,int start,int end) {    if (start > end)return;    int i = start;    while (i < end&&in[i] != last[root])i++;    levelorder(root - end + i-1, start,i-1);    cout << last[root] << " ";    levelorder(root-1, i + 1, end); }int main(){    levelorder(5,0,5);    return 0;}
原创粉丝点击