数据结构与算法(四):二叉树
生活随笔
收集整理的這篇文章主要介紹了
数据结构与算法(四):二叉树
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
二叉樹
基本概念
- 結(jié)點(diǎn):結(jié)構(gòu)中的邏輯單元,用于保存數(shù)據(jù)
- 度數(shù):一個(gè)結(jié)點(diǎn)的子結(jié)點(diǎn)個(gè)數(shù)
二叉樹的性質(zhì)
二叉樹種類
定義一個(gè)二叉樹
class Node:def __init__(self, value=None, left=None, right=None):self.value = valueself.left = leftself.right = right1. 二叉樹遍歷
- 深度遍歷(前中后)
- 廣度遍歷
#層次遍歷
def traversal(root):pass2. 測(cè)試一下是否可行
if __name__ == '__main__':root=Node('D',Node('B',Node('A'),Node('C')),Node('E',right=Node('G',Node('F'))))print('preTraverse:')preTraverse(root)print('midTraverse:')midTraverse(root)print('afterTraverse:')afterTraverse(root)3.已知前序中序遍歷,求后續(xù)遍歷
def findTree1(preList, midList, afterList1):'''wrong program''''if len(preList) == 0:returnif len(preList) == 1:afterList1.append(preList[0])return root = preList[0]n = midList.index(root)findTree1(preList[1:n+1], midList[:n], afterList1)findTree1(preList[n+1:], midList[n+1:], afterList1)afterList1.append(root)def findTree2(preList, midList, afterList2):if len(preList) == 0:returnif len(preList) == 1:afterList2.append(preList[0])returnroot = preList[0]n = midList.index(root)findTree2(preList[1:n + 1], midList[:n], afterList2)findTree2(preList[n + 1:], midList[n + 1:], afterList2)afterList2.append(root) if __name__ == '__main__':preList = list('12473568')midList = list('47215386')afterList1 = []afterList2 = []findTree1(preList, midList, afterList1)findTree2(preList, midList, afterList2)print(afterList1)print(afterList2)4.求二叉樹的深度和寬度
def getMaxDepth(tree):if tree == None:return 0l = getMaxDepth(tree.left)r = getMaxDepth(tree.right)return max(l, r)+1參考
總結(jié)
以上是生活随笔為你收集整理的数据结构与算法(四):二叉树的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构与算法(一):链表
- 下一篇: 数据结构与算法(二):队列