已知前序中序序列,求后序遍历序列

来源:互联网 发布:污水厂化验数据日报表 编辑:程序博客网 时间:2024/05/18 02:13

给出一棵二叉树的前序和中序遍历,输出后续遍历的结果。

如前序:ABDHECFG,中序:HDBEAFCG,则输出后序为:HDEBFGCA


思路:先根据前序和中序序列构建出二叉树,然后后序输出该二叉树

struct Node{char data;Node *left;Node *right;};Node *getBinaryTree(char *preOrder, char *inOrder, int len){if (preOrder == NULL || *preOrder == '\0' || len <= 0)return NULL;Node *root = new Node;root->data = *preOrder;// 前序遍历的第一个节点就是根节点// 找到根节点在中序遍历中的位置,其值也代表了左子树的节点数目int pos = 0;while (1){if (*(inOrder + pos) == root->data){break;}pos++;}// 递归找到左子树和右子树if (0 == pos){root->left = NULL;}else{root->left = getBinaryTree(preOrder + 1, inOrder, pos);}if (0 == len - pos - 1){root->right = NULL;}else{root->right = getBinaryTree(preOrder + pos + 1, inOrder + pos + 1, len - pos - 1);}return root;}void postOrder(Node *root){if (root == NULL)return;postOrder(root->left);postOrder(root->right);cout << root->data;}