Python算法之求n個節(jié)點不同二叉樹個數(shù)
問題
創(chuàng)建一個二叉樹
二叉樹有限多個節(jié)點的集合,這個集合可能是:
空集
由一個根節(jié)點,和兩棵互不相交的,分別稱作左子樹和右子樹的二叉樹組成
創(chuàng)建二叉樹:
創(chuàng)建節(jié)點
再創(chuàng)建節(jié)點之間的關(guān)系
Python代碼示例
# !/usr/bin/env python
# -*-encoding: utf-8-*-
# author:LiYanwei
# version:0.1
class 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)
# 節(jié)點
A = TreeNode('A')
B = TreeNode('B')
C = TreeNode('C')
D = TreeNode('D')
# 節(jié)點間的關(guān)系
A.left = B
A.right = C
B.right = D
print B.right
問題
求n個節(jié)點不同二叉樹個數(shù)
1個節(jié)點
根節(jié)點1 1種
1種二叉樹
2個節(jié)點
根節(jié)點1 左節(jié)點1 1種(依照1節(jié)點的推斷)
根節(jié)點1 右節(jié)點1 1種(依照1節(jié)點的推斷)
2種二叉樹
3個節(jié)點
根節(jié)點1 左節(jié)點0 右節(jié)點2 2種(依照2節(jié)點的推斷)
根節(jié)點1 左節(jié)點1 右節(jié)點1 1種(依照1節(jié)點的推斷)
根節(jié)點1 左節(jié)點2 右節(jié)點0 2種(依照2節(jié)點的推斷)
5種二叉樹
4個節(jié)點
根節(jié)點1 左節(jié)點0 右節(jié)點3 5種(依照3節(jié)點的推斷)
根節(jié)點1 左節(jié)點1 右節(jié)點2 2種(依照2節(jié)點的推斷)
根節(jié)點1 左節(jié)點2 右節(jié)點1 2種(依照2節(jié)點的推斷)
根節(jié)點1 左節(jié)點3 右節(jié)點0 5種(依照4上面的推斷)
共14種二叉樹
...
n個節(jié)點
遞歸進行累加
Python代碼示例
# !/usr/bin/env python
# -*-encoding: utf-8-*-
# author:LiYanwei
# version:0.1
# 求n個節(jié)點不同二叉樹個數(shù)
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
# 重復(fù)計算優(yōu)化
count.cache = {0 : 1}
print count(100)
總結(jié)
以上就是本文關(guān)于Python算法之求n個節(jié)點不同二叉樹個數(shù)的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:Python探索之自定義實現(xiàn)線程池、python中模塊的__all__屬性詳解等,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關(guān)文章
Python中內(nèi)存監(jiān)控的三種實現(xiàn)方法介紹
在?Python?開發(fā)中,對內(nèi)存使用情況進行監(jiān)控是一項至關(guān)重要的任務(wù),本文為大家整理了三種常用的內(nèi)存監(jiān)控方法的實現(xiàn)與對比,有需要的可以了解下2025-02-02
python實現(xiàn)將讀入的多維list轉(zhuǎn)為一維list的方法
今天小編就為大家分享一篇python實現(xiàn)將讀入的多維list轉(zhuǎn)為一維list的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06
Python 分布式緩存之Reids數(shù)據(jù)類型操作詳解
這篇文章主要介紹了Python 分布式緩存之Reids數(shù)據(jù)類型操作詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
python代碼 if not x: 和 if x is not None: 和 if not x is None:使用
這篇文章主要介紹了python代碼 if not x: 和 if x is not None: 和 if not x is None:使用介紹,需要的朋友可以參考下2016-09-09

