問題
創建一個二叉樹
二叉樹有限多個節點的集合,這個集合可能是:
空集
由一個根節點,和兩棵互不相交的,分別稱作左子樹和右子樹的二叉樹組成
創建二叉樹:
創建節點
再創建節點之間的關系
Python代碼示例
# !/usr/bin/env python# -*-encoding: utf-8-*-# author:LiYanwei# version:0.1class TreeNode(object): def __init__ (self, data, left = None, right = None): self.data = data self.left = left self.right = right def __str__(self): return str(self.data)# 節點A = TreeNode('A')B = TreeNode('B')C = TreeNode('C')D = TreeNode('D')# 節點間的關系A.left = BA.right = CB.right = Dprint B.right問題
求n個節點不同二叉樹個數
1個節點
根節點1 1種
1種二叉樹
2個節點
根節點1 左節點1 1種(依照1節點的推斷)
根節點1 右節點1 1種(依照1節點的推斷)
2種二叉樹
3個節點
根節點1 左節點0 右節點2 2種(依照2節點的推斷)
根節點1 左節點1 右節點1 1種(依照1節點的推斷)
根節點1 左節點2 右節點0 2種(依照2節點的推斷)
5種二叉樹
4個節點
根節點1 左節點0 右節點3 5種(依照3節點的推斷)
根節點1 左節點1 右節點2 2種(依照2節點的推斷)
根節點1 左節點2 右節點1 2種(依照2節點的推斷)
根節點1 左節點3 右節點0 5種(依照4上面的推斷)
共14種二叉樹
...
n個節點
遞歸進行累加
Python代碼示例
# !/usr/bin/env python# -*-encoding: utf-8-*-# author:LiYanwei# version:0.1# 求n個節點不同二叉樹個數def count(n): # root : 1 # left : k # right : n - 1- k # s = 0 # if n == 0: # # 空樹 # return 1 s = count.cache.get(n, 0) if s: return s for k in xrange(n): s += count(k) * count(n - 1 - k) count.cache[n] = s return s# 重復計算優化count.cache = {0 : 1}print count(100)總結
以上就是本文關于Python算法之求n個節點不同二叉樹個數的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站:Python探索之自定義實現線程池、python中模塊的__all__屬性詳解等,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
新聞熱點
疑難解答