網(wǎng)站首頁(yè) 編程語言 正文
方法一(粗暴)
#二叉排序樹 class BTree(): ? ? def __init__(self,data): ? ? ? ? self.left = None ? ? ? ? self.right = None ? ? ? ? if type(data) == list: ? ? ? ? ? ? self.data = data[0] ? ? ? ? ? ? for d in data[1:]: ? ? ? ? ? ? ? ? self.insert(d) ? ? ? ? else: ? ? ? ? ? ? self.data = data ? ? def insert(self,data): ? ? ? ? bt = self ? ? ? ? while True: ? ? ? ? ? ? if data <= bt.data: ? ? ? ? ? ? ? ? if bt.left == None: ? ? ? ? ? ? ? ? ? ? bt.left = BTree(data) ? ? ? ? ? ? ? ? ? ? break ? ? ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? ? ? bt = bt.left ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? if bt.right == None: ? ? ? ? ? ? ? ? ? ? bt.right = BTree(data) ? ? ? ? ? ? ? ? ? ? break ? ? ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? ? ? bt = bt.right ? ? def mid_order(self): ? ? ? ? res = [] ? ? ? ? stack = [] ? ? ? ? node = self? ? ? ? ? while node or stack: ? ? ? ? ? ? while node: ? ? ? ? ? ? ? ? stack.append(node)? ? ? ? ? ? ? ? ? node = node.left ? ? ? ? ? ? node = stack.pop() ? ? ? ? ? ? res.append(node.data) ? ? ? ? ? ? node = node.right ? ? ? ? return res data = [5,1,2,3,6,8,9] bt = BTree(data) print(bt.mid_order())
方法二(遞歸)
class TreeNode(object): ? ? def __init__(self,data): ? ? ? ? self.data = data ? ? ? ? self.left = None ? ? ? ? self.right = None class BinaryTree(object): ? ? def insert(self,root, node): ? ? ? ? if root is None: ? ? ? ? ? ? return node ? ? ? ? if node.data < root.data: ? ? ? ? ? ? root.left = self.insert(root.left, node) ? ? ? ? else: ? ? ? ? ? ? root.right = self.insert(root.right, node) ? ? ? ? return root ? ? def mid_order(self,root): ? ? ? ? node = root ? ? ? ? stack = [] ? ? ? ? res = [] ? ? ? ? while node or stack: ? ? ? ? ? ? while node: ? ? ? ? ? ? ? ? stack.append(node) ? ? ? ? ? ? ? ? node = node.left ? ? ? ? ? ? node = stack.pop() ? ? ? ? ? ? res.append(node.data) ? ? ? ? ? ? node = node.right ? ? ? ? return res ? ?? data = [5,1,2,3,6,8,9] root = TreeNode(data[0]) tree = BinaryTree() for i in data[1:]: ? ? tree.insert(root,TreeNode(i)) print(tree.mid_order(root))
原文鏈接:https://blog.csdn.net/EMIvv/article/details/122457325
相關(guān)推薦
- 2022-09-16 Pandas缺失值刪除df.dropna()的使用_python
- 2022-07-04 C#操作配置文件app.config、web.config增刪改_C#教程
- 2023-04-01 Pytorch中關(guān)于F.normalize計(jì)算理解_python
- 2022-05-17 bat批處理腳本中文亂碼的解決_DOS/BAT
- 2022-09-17 使用cache加快編譯速度的命令詳解_相關(guān)技巧
- 2023-03-27 React里的Fragment標(biāo)簽的具體使用_React
- 2022-03-31 SQL?Server的觸發(fā)器詳解_MsSql
- 2022-07-09 docker 中進(jìn)程的信號(hào)
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支