国产探花免费观看_亚洲丰满少妇自慰呻吟_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__屬性詳解等,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青铜峡市| 安乡县| 慈利县| 庆城县| 彰化市| 左贡县| 乡宁县| 衡阳县| 上林县| 曲麻莱县| 隆化县| 武乡县| 贵德县| 高要市| 九寨沟县| 鹰潭市| 涿州市| 门头沟区| 丽江市| 大足县| 土默特左旗| 绥江县| 宁德市| 随州市| 道真| 报价| 曲麻莱县| 内黄县| 柳州市| 宜兰县| 平山县| 巫溪县| 历史| 盘山县| 涞水县| 东莞市| 永康市| 乐至县| 开封市| 潜江市| 汉沽区|