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を参照);
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<