C++は既知の二叉木の前序遍歴と中序遍歴を実現し、後序遍歴を求める

1484 ワード

一、基本概念
1.順方向ループ(NLR)は、二叉木の親子ノードを決定することができる.
2.中序遍歴(LNR)は二叉木の左右のサブツリーを確定することができる.
3.後順遍歴(LRN)は、二叉木の親子接点を決定することができる.
二、結論
1.先序遍歴、中序遍歴シーケンスが知られており、唯一の二叉木を作成することができ、二叉木の後序遍歴を得ることができる.
2.後序遍歴、中序遍歴シーケンスが知られており、唯一の二叉木を作成することができ、さらに二叉木の先序シーケンスを得ることができる.
3.総じて、中序遍歴(二叉樹の左右の子供を確定する)を含む必要があり、先序遍歴または後序遍歴のいずれか(二叉樹の親子の結点を確定する)を選択すれば、一本の唯一の二叉樹を確定することができる
三、C++コード実現
1.先序遍歴と中序遍歴、印刷後序遍歴が知られている(関数void postorder(string preorder,string inorderを参照).
2.既知の中序遍歴と後序遍歴、印刷先序遍歴(関数void preorder(string inorder,string postorderを参照);
#include
#include
using namespace std;
/*
               pos,      len,  len=inorder.length() 
  :pos = inorder.find(preorder[0]) or pos = inorder.find(postorder[postorder.size()-1]) 
    (NLR),      (0),      (1~pos),      (pos+1~len-1) 
    (LNR),      (0~pos-1),      (pos),      (pos+1~len-1)  
    (LRN),      (0~pos-1),      (pos~len-2),     (len-1) 
*/
void postorder(string preorder,string inorder){//     +      ,         (LRN) 
	int len = preorder.length();
	if(len==0)
		return;
	if(len==1)
	{  //     
		cout<>s1>>s2)
    {
        postorder(s1,s2);
     	// preorder(s1, s2); 
        cout<