vlambda博客
学习文章列表

【二叉树】已知先根、中根、求取后根遍历

    我的作品是由c++代码组成,有兴趣的朋友们!在电脑上请下载Dev-c++或是有VS(如下图)之类可以编译c++的软件,把源代码拷贝,编译运行即可。

    二叉树介绍:与度为二的树不同,二叉树分左子树与右子树,每个分支分为根(root)、叶(leaf/child),先根遍历就是在每个分支中,由根->左叶->右叶读出数据;中根就是左叶->根->右叶;而后根可想而知:左叶->右叶->根。

【二叉树】已知先根、中根、求取后根遍历

(二叉树)


    关于二叉树就不再阐述了,下面来继续说这个程序的功能:已知一个二叉树整体的先根、中根,求后根遍历,是有一个固定值的。

    上代码:

#include<bits/stdc++.h>

using namespace std;

char pre[50] = { 'G','D','A','F','E','M','H','Z' };

char in[50] = { 'A','D','E','F','G','H','M','Z' };

int n;

struct node {

int data;

node* l;

node* r;

};

void postorder(node* root) {

if (root == NULL)return;

postorder(root->l);

postorder(root->r);

printf("%c\n", root->data);

}

node* create(int preL, int preR, int inL, int inR) {

if (preL > preR)return NULL;

node* root = new node;

root->data = pre[preL];

int k;

for (k = inL; inL < inR; k++) {

if (in[k] = pre[preL])

break;

}

int numleft =k-inL;

root->l = create(preL + 1, preL + numleft, inL, k - 1);

root->r = create(preL + numleft + 1, preR, k + 1, inR);

return root;

}

int main() {

n = 8;

node* root = create(0, n - 1, 0, n - 1);

postorder(root);

return 0;

}

出来的是一个黑框

这只是关于这道题的解法,其他题的就可以在代码里修改,修改的是这个部分:

    这里可以添加“‘【节点号】’,”,双引号里这样的格式,左面标3的是先根遍历,标4的是中根遍历,注意:最多只能标49个数,不然程序不支持,电脑也会反应不过来。

    这就是二叉树已知先根、中根、求取后根遍历的所有了,谢谢大家。