国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python算法之求n個節點不同二叉樹個數

2020-02-16 10:30:20
字體:
來源:轉載
供稿:網友

問題

創建一個二叉樹

二叉樹有限多個節點的集合,這個集合可能是:

空集

由一個根節點,和兩棵互不相交的,分別稱作左子樹和右子樹的二叉樹組成

創建二叉樹:

創建節點

再創建節點之間的關系

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__屬性詳解等,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 赤城县| 江华| 普兰店市| 翁牛特旗| 玉龙| 罗甸县| 克山县| 巴彦县| 酉阳| 定安县| 南城县| 正定县| 惠来县| 佛教| 大庆市| 扶沟县| 惠水县| 绵竹市| 临漳县| 潼关县| 北川| 金川县| 和田县| 施甸县| 三穗县| 奉节县| 阿勒泰市| 湟源县| 十堰市| 交口县| 沅陵县| 天祝| 湛江市| 屏山县| 莆田市| 资溪县| 嘉义市| 诏安县| 宁河县| 三亚市| 朝阳市|