【二叉树】已知先根、中根、求取后根遍历
我的作品是由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个数,不然程序不支持,电脑也会反应不过来。
这就是二叉树已知先根、中根、求取后根遍历的所有了,谢谢大家。