二叉树遍历 已知中序后序遍历求前序遍历
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树遍历 已知中序后序遍历求前序遍历相关的知识,希望对你有一定的参考价值。
已知中序、后序遍历求前序遍历的方法和已知前序、中序遍历求后序遍历的方法类似寻找根节点,
然后把中序遍历分成左右两个子树,有如此不断递归。很多文章介绍,不再累述。
#include <iostream> #include <cstdio> #include <queue> #include <cstring> using namespace std; const int MAXN = 100; struct Node { char value; Node *left_child; Node *right_child; Node () { left_child = right_child = NULL; } }; bool first = true; void Pre_order(Node *tree) { if(first) { cout << tree->value; first = false; } else cout << " " << tree->value; if(tree->left_child != NULL) { Pre_order(tree->left_child); } if(tree->right_child != NULL) { Pre_order(tree->right_child); } } Node* build(char pos[], char in[], int n) { if(n == 0) return NULL; Node *tmp = new Node; for(int i = 0; i < n; i++) { if(in[i] == pos[n-1]) { tmp->value = pos[n-1]; tmp->left_child = build(pos, in, i); tmp->right_child = build(pos+i, in+i+1, n-i-1); return tmp; } } return NULL; } int main() { int n; char posorder[MAXN], inorder[MAXN]; scanf("%d", &n); first = false; scanf("%s", inorder); scanf("%s", posorder); Node *tree = build(posorder, inorder, n); Pre_order(tree); return 0; }
以上是关于二叉树遍历 已知中序后序遍历求前序遍历的主要内容,如果未能解决你的问题,请参考以下文章