1. 程式人生 > >卡特蘭數-N個結點二叉樹個數

卡特蘭數-N個結點二叉樹個數

      N個結點二叉樹個數(不用卡特蘭數求解)
對於一個堆疊、若其入棧序列為1,2,3,……,n,不同的出入棧操作將產生不同的出棧序列。其出棧序列的個數正好等於結點個數為n的二叉樹的個數,且與不同形態的二叉樹一一對應。請簡要敘述一種從堆疊輸入(固定為1,2,3,……,n)/ 輸出序列對應一種二叉樹形態的方法,並以入棧序列1,2,3(即n=3)為例加以說明。 



本題考查棧的出入棧操作、二叉樹的遍歷思想。由於二叉樹前序遍歷序列和中序遍歷序列可唯一確定一棵二叉樹。因此,若入棧序列為1,2,3,……,n,相當於前序遍歷序列是1,2,3,……,n,出棧序列就是該前序遍歷對應的二叉樹的中序序列的數目。

——————————補充分割線——————————

好久之前寫的了。。。自己現在看起來還是有點暈

補充解釋一下,為什麼“若入棧序列為1,2,3,……,n,相當於前序遍歷序列是1,2,3,……,n

對於入棧序列為1,2,..., n,可以考慮第一個節點,當它出棧的時候,棧必然是空的。也就是說,在出棧序列中,在1左邊的都是先於1出棧的,在其右邊的都是後於1出棧的,這個關係對應到入棧序列中,顯然先於1出棧的節點在入棧序列中的位置是2-x(即是連續的)。這個特點和先序遍歷、中序遍歷是一致的。

現在看看,覺得這樣思考問題比較麻煩,不如先證明入棧-出棧問題的解的個數是一個卡特蘭數,然後證明n個結點的二叉樹的個數也是一個卡特蘭數,即可證明兩個問題其實是等價的,這樣更通用且簡單一些

————————————結束———————————


進棧出棧操作與二叉樹中序遍歷的關係:①一個結點進棧後有兩種處理方式:要麼立刻出棧(沒有左孩子);或者下一個結點進棧(有左孩子)。②一個結點出棧後也有兩種處理方式:要麼繼續出棧(沒有右孩子);或者下一個結點進棧(有右孩子)。