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

