日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构与算法(四):二叉树

發(fā)布時(shí)間:2024/10/8 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构与算法(四):二叉树 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

二叉樹

基本概念
  • 結(jié)點(diǎn):結(jié)構(gòu)中的邏輯單元,用于保存數(shù)據(jù)
  • 度數(shù):一個(gè)結(jié)點(diǎn)的子結(jié)點(diǎn)個(gè)數(shù)
二叉樹的性質(zhì)
  • 最多兩個(gè)子樹,有左右區(qū)分
  • i{i}i層的最多有2i?12^{i-1}2i?1個(gè)節(jié)點(diǎn)
  • 二叉樹種類
  • 滿二叉樹:所有分支結(jié)點(diǎn)的度數(shù)都是2
  • 擴(kuò)充二叉樹:對(duì)二叉樹加入足夠多的葉子結(jié)點(diǎn),使所有原結(jié)點(diǎn)變?yōu)槎葦?shù)為2的分支結(jié)點(diǎn)
  • 完全二叉樹:最后一層葉子都在左邊
  • 平衡二叉樹:
  • 定義一個(gè)二叉樹
    class Node:def __init__(self, value=None, left=None, right=None):self.value = valueself.left = leftself.right = right
    1. 二叉樹遍歷
    • 深度遍歷(前中后)
    • 廣度遍歷
    #遞歸 def preTraverse(note):if note == None:returnprint(note.value)preTraverse(note.left)preTraverse(note.right) def midTraverse(note):if note == None:returnmidTraverse(note.left)print(note.value)midTraverse(note.right)def afterTraverse(note):if note == None:return afterTraverse(note.left)afterTraverse(note.right)print(note.value) #迭代 # pre def preIter(root):stack = []while stack or root:if root:print(root)stack.append(root.right)stack.append(root.left)else:tmp = stack.pop()# mid def midIter(root):stack = []while stack or root:if root:stack.append(root)root = root.leftelse:tmp = stack.pop()print(tmp.value)root = tmp.right

    #層次遍歷

    def traversal(root):pass
    2. 測(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

    參考

  • python: http://www.cnblogs.com/freeman818/p/7252041.html
  • java:https://blog.csdn.net/u012428012/article/details/79089915
  • 總結(jié)

    以上是生活随笔為你收集整理的数据结构与算法(四):二叉树的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。