Uva536 Tree Recovery二叉树重建(先序和中序确定二叉树,后序输出)
生活随笔
收集整理的這篇文章主要介紹了
Uva536 Tree Recovery二叉树重建(先序和中序确定二叉树,后序输出)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目大意:給定二叉樹先序和中序遍歷,輸出二叉樹后序遍歷。
方法:將英文字母映射為數字,利用數組存儲,先序第一個節點是父節點,然后再從中序遍歷中找到位置。注意邊界。代碼也很簡單一次ac。
#include<iostream> #include <string> #include <string.h> using namespace std; string preorder,inorder; int lefttree[1000], righttree[1000]; int build(int preleft,int preright,int inleft,int inright) {if (preleft> preright)return -1;int index = inorder.find(preorder[preleft],inleft);int l1 = index - inleft;int r1 = inright - index;lefttree[preorder[preleft] - 'A']=build( preleft + 1, preleft + l1, inleft, index - 1);righttree[preorder[preleft] - 'A']=build( preleft + l1 + 1, preleft + l1 + r1, index+1, inright);return preorder[preleft]-'A'; } void printTree(int root) {if (root == -1)return;printTree(lefttree[root]);printTree(righttree[root]);cout << (char)(root + 'A'); } int main() { while (cin >> preorder && cin >> inorder) {memset(righttree, -1, sizeof(righttree));memset(lefttree, -1, sizeof(lefttree));build(0, preorder.length()-1, 0, preorder.length()-1);printTree(preorder[0]-'A');cout << endl; }return 0; }?
總結
以上是生活随笔為你收集整理的Uva536 Tree Recovery二叉树重建(先序和中序确定二叉树,后序输出)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UVa712 S-Trees满二叉树
- 下一篇: UVa1600 PatrolRobot