HRBUST 2040 二叉树的遍历
作者:互联网
给出一棵二叉树的中序和前序遍历,输出它的后序遍历。
Input
4 2 5 1 6 3 7
本题有多组数据,输入处理到文件结束。
每组数据的第一行包括一个整数n,表示这棵二叉树一共有n个节点。
接下来的一行每行包括n个整数,表示这棵树的中序遍历。
接下来的一行每行包括n个整数,表示这棵树的前序遍历。
3<= n <= 100
Output 每组输出包括一行,表示这棵树的后序遍历。 Sample Input 74 2 5 1 6 3 7
1 2 4 5 3 6 7
Sample Output 4 5 2 6 7 3 1 这里后序遍历写了一个非递归,嗯,为考研做准备。 代码:
#include <stdio.h> #include <stdlib.h> typedef struct Node { int Data; struct Node *Left,*Right; }Node; int q[100],z[100];///q记录前序遍历 z记录中序遍历 Node* creatNode() { Node *node = (Node *)malloc(sizeof(Node)); if(node == NULL) exit(0); node -> Left = node -> Right = NULL; return node; } Node* rTree(int q1,int q2,int z1,int z2) { Node *node = creatNode(); node -> Data = q[q1]; for(int i = z1;i <= z2;i ++) { if(z[i] == q[q1]) { if(i != z1) node -> Left = rTree(q1 + 1,q1 + i - z1,z1,i - 1); if(i != z2) node -> Right = rTree(q1 + i - z1 + 1,q2,i + 1,z2);//右儿子构建 break; } } return node; } //void postOrder(Node *node) { // if(node == NULL) return; // postOrder(node -> Left); // postOrder(node -> Right); // printf("%d ",node -> Data); //} //void postOrder(Node *node) {///下标标记 // Node *s[100]; // char num[100] = {0}; // int c = 0; // s[c ++] = node; // while(c) { // Node *temp = s[c - 1]; // if(num[c - 1]) { // num[c - 1] = 0; // printf("%d ",s[-- c] -> Data); // } // else { // num[c - 1] = 1; // if(temp -> Right) { // s[c ++] = temp -> Right; // } // if(temp -> Left) { // s[c ++] = temp -> Left; // } // } // } //} void postOrder(Node *node) {///前驱结点判断 Node *s[100],*la; int c = 0; s[c ++] = node; while(c) { Node *temp = s[c - 1]; if(temp -> Left == temp -> Right && temp -> Left == NULL || la == temp -> Left || la == temp -> Right) { printf("%d ",s[-- c] -> Data); la = temp; } else { if(temp -> Right && la != temp -> Right) { s[c ++] = temp -> Right; } if(temp -> Left && la != temp -> Left) { s[c ++] = temp -> Left; } } } } int main() { int n; Node *tree; while(~scanf("%d",&n)) { for(int i = 0;i < n;i ++) { scanf("%d",&z[i]); } for(int i = 0;i < n;i ++) { scanf("%d",&q[i]); } tree = rTree(0,n - 1,0,n - 1); postOrder(tree); putchar('\n'); } return 0; }
标签:node,Node,HRBUST,Right,2040,temp,int,二叉树,Left 来源: https://www.cnblogs.com/8023spz/p/7240260.html