已知一棵二叉樹的中序遍歷和後序遍歷,求二叉樹的先序遍歷
輸入資料有多組,第一行是乙個整數t (t<1000),代表有t組測試資料。每組包括兩個長度小於50 的字串,第乙個字串表示二叉樹的中序遍歷序列,第二個字串表示二叉樹的後序遍歷序列。
輸出二叉樹的先序遍歷序列
2dbgeafc
dgebfca
lnixu
linux
abdegcfxnliu
#include using namespace std;
typedef struct node
tree;
tree *creat(int len,char *in,char *last)
/*中序遍歷中根節點的左邊全都是左子樹的中序,
右邊全是右子樹中序。然而每個子樹的先序序列的第乙個節點是
子樹的根,而且向後移動中序查詢得到的左子樹節點數便可分開
得到左右子樹。因此可以用遞迴分而治之*/
head=new node;
char *p;
head->data=last[len-1]; //先序的第乙個節點指定是當前子樹的根
for(p=in; p!=null; p++)
if(*p==last[len-1]) break;
int lon=p-in; //左子樹節點的個數
head->l=creat(lon,in,last); //分而治之建立左子樹
head->r=creat(len-lon-1,p+1,last+lon); //分而治之建立右子樹
return head;
} void pre(tree * root)
} int main()
return 0;
}
求二叉樹的先序遍歷(中序 後序 先序)
problem description 已知一棵二叉樹的中序遍歷和後序遍歷,求二叉樹的先序遍歷 input 輸入資料有多組,第一行是乙個整數t t 1000 代表有t組測試資料。每組包括兩個長度小於50 的字串,第乙個字串表示二叉樹的中序遍歷序列,第二個字串表示二叉樹的後序遍歷序列。output 輸...
二叉樹遍歷 已知先序和中序,求後序遍歷
如下 include include include include using namespace std 先定義樹的結構體 struct treenode 建樹 treenode build string preorder,string inorder 先序的第乙個結點為樹的根節點 char c...
二叉樹 已知後序 中序遍歷,求先序遍歷
二叉樹後序遍歷序列是dabec,中序遍歷序列debac,它的前序遍歷的序列是什麼 1.由後序 lrd 得知c肯定為根結點 2.由中序 ldr 以c為根節點該樹必然只有左子樹 3.先從後序入樹 dabec 由遍歷規則得知,e 為第二層節點 於是有ce 4.結合中序遍歷debac觀察節點,由於 e為第二...