—————————————————————————————————————
先來解決上面的問題,既然是利用樹的中序和後序求前序,就蘭我們看一下他們之間有什麼關係。
前序:根左右 ;中序:左根右 ;後序:左右根。
後序遍歷的最後乙個必然是根,這樣就可以在中序遍歷中找到左右子樹的範圍。
badchgef(中序)
abcdefgh (後序)
從後序的最後乙個『h』為當前的根節點,在中序中可看出『h』左邊的是左子樹(badc),右邊是右子樹(gef)。由此可以遞迴左右子樹,把左右子樹看作一棵新樹,重複操作即可。
下面附上**
#include
#include
#include
using
namespace
std;
char in[100];
char post[100];
int len;
typedef
struct a
tree;
tree* preform(char* in,char* post,int n)
cout
<< post[n - 1] ;
int i = 0;
for(;i < n;++i)//用來檢查左右子樹的長度
}tree* t = new tree;
t-> l_child = preform(in,post,i);
t -> r_child = preform(in + i + 1,post + i,n - i - 1);
return t;
}int main()
}
如果想由前序和中序求後序原理也是一樣的,不再贅述,直接上**
tree* f(char* pre,char* in,int n)
tree* t = new tree;
t -> c = pre[0];
int i = 0;
for(;i <= n-1;++i)
t -> l_child = f(pre + 1,in,i);
t -> r_child = f(pre + i + 1 ,in + i + 1,n - i - 1);
return
t;}
愛思考的寶寶們可能回想由前序和後序能不能確定一棵樹的結構,現在讓我們來分析一下確定一棵樹的結構需要什麼吧,樹由左子樹,右子樹構成,只要確定了這三者一棵樹的結構就確定了上述的兩種做法都需要中序遍歷的結果,是因為中序可以確切的知道一棵樹的左右子樹及根接下來我們分析如果知道前序,後序,看看能不能找到根,左子樹,右子樹,就行了。前序是根在前,後序是根在後,僅僅通過這個無法確切的知道左右子樹的範圍,故不行。但是知道如果樹的度為0或2,也可以確定,但這個是比較特殊的情況,就不詳細介紹了。 樹的前序 中序 後序遍歷
樹的前序 中序 後序遍歷 遞迴方法 ab c 樹的結構定義 struct treenode typedef treenode node typedef int eletype struct treenode 1 前序遍歷 先序遍歷,就是從上到下,從左到右,遇到乙個就遍歷,上面這個例子遍歷的序列就是 ...
樹的前序遍歷 中序遍歷 後序遍歷詳解
圖1對於當前節點,先輸出該節點,然後輸出他的左孩子,最後輸出他的右孩子。以上圖為例,遞迴的過程如下 1 輸出 1,接著左孩子 2 輸出 2,接著左孩子 3 輸出 4,左孩子為空,再接著右孩子 4 輸出 6,左孩子為空,再接著右孩子 5 輸出 7,左右孩子都為空,此時 2 的左子樹全部輸出,2 的右子...
樹的前序遍歷 中序遍歷 後序遍歷詳解
圖1對於當前節點,先輸出該節點,然後輸出他的左孩子,最後輸出他的右孩子。以上圖為例,遞迴的過程如下 1 輸出 1,接著左孩子 2 輸出 2,接著左孩子 3 輸出 4,左孩子為空,再接著右孩子 4 輸出 6,左孩子為空,再接著右孩子 5 輸出 7,左右孩子都為空,此時 2 的左子樹全部輸出,2 的右子...