python二叉树的创建与遍历
二叉樹的基本概念:
一個(gè)結(jié)點(diǎn)的層次直觀上來(lái)說(shuō)就是其所在的行,其中根結(jié)點(diǎn)層次為1(第一行),其子結(jié)點(diǎn)層次為2(第二行),以此類推
二叉樹的深度(高度):指的是二叉樹中的最大葉子結(jié)點(diǎn)所在的層。二叉樹的深度=max(左子樹深度,右子數(shù)深度)+1,可用遞歸的方式實(shí)現(xiàn)。
二叉樹結(jié)點(diǎn)的度:指該結(jié)點(diǎn)分支的個(gè)數(shù)(0,1,2)
完全二叉樹:若設(shè)二叉樹的高度為h,除第 h 層外,其它各層 (1-h-1) 的結(jié)點(diǎn)數(shù)都達(dá)到最大個(gè)數(shù),第h層有葉子結(jié)點(diǎn),并且葉子結(jié)點(diǎn)都是從左到右依次排布
滿二叉樹:除了葉結(jié)點(diǎn)外每一個(gè)結(jié)點(diǎn)都有左右子葉且葉子結(jié)點(diǎn)都處在最底層的二叉樹
平衡二叉樹(AVL):二叉排序樹,空,或左子樹和右子樹都是平衡二叉樹,且深度差<=1
性質(zhì):
(1) 在非空二叉樹中,第i層的結(jié)點(diǎn)總數(shù)不超過, i>=1;
(2) 深度為h的二叉樹最多有個(gè)結(jié)點(diǎn)(h>=1),最少有h個(gè)結(jié)點(diǎn);
(3) 對(duì)于任意一棵二叉樹,如果其葉結(jié)點(diǎn)數(shù)為N0,而度數(shù)為2的結(jié)點(diǎn)總數(shù)為N2,則N0=N2+1;度為1的結(jié)點(diǎn)數(shù)N1=N-N0-N2
(4) 具有n個(gè)結(jié)點(diǎn)的完全二叉樹的深度為(注:[ ]表示向下取整)
(5)有N個(gè)結(jié)點(diǎn)的完全二叉樹各結(jié)點(diǎn)如果用順序方式存儲(chǔ),則結(jié)點(diǎn)之間有如下關(guān)系:
若I為結(jié)點(diǎn)編號(hào)(編號(hào)從1開始)則 如果I>1,則其父結(jié)點(diǎn)的編號(hào)為I/2;
如果2*I<=N,則其左兒子(即左子樹的根結(jié)點(diǎn))的編號(hào)為2*I;若2*I>N,則無(wú)左兒子;
如果2*I+1<=N,則其右兒子的結(jié)點(diǎn)編號(hào)為2*I+1;若2*I+1>N,則無(wú)右兒子。
(若編號(hào)從0開始,設(shè)l為父節(jié)點(diǎn)編號(hào),則其左兒子的編號(hào)為2*l + 1, 其右兒子的編號(hào)為2*l + 2)
二叉樹的創(chuàng)建與遍歷:
# /usr/bin/pyhton #coding=utf-8 # #author:yumianzhanclass Tree_node():def __init__(self, v = None, l = None, r = None):self.value = vself.left = lself.right = r#創(chuàng)建二叉樹 def creat(root):a = input('Inter a key:')if a is '!':print(a)root = Noneelse:root = Tree_node(v = a)root.left = creat(root.left)root.right = creat(root.right)return root#前序遍歷 def preorder(root):if root is None:returnprint(root.value)preorder(root.left)preorder(root.right)#中序遍歷 def inorder(root):if root is None:returninorder(root.left)print(root.value)inorder(root.right)#后序遍歷 def postorder(root):if root is None:returnpostorder(root.left)postorder(root.right)print(root.value)#測(cè)試 def main():root = Noneroot = creat(root)print(root)print('前序遍歷:')preorder(root)print('中序遍歷:')inorder(root)print('后序遍歷:')postorder(root)if __name__ == '__main__':main()運(yùn)行程序,建立二叉樹如下:
前序遍歷結(jié)果為: a ?b ?c ?d ?e ?f
中序遍歷結(jié)果為:c ?b ?d ?a ?f ?e?
后序遍歷結(jié)果為:c ?d ?b ?f ?e ?a?
總結(jié)
以上是生活随笔為你收集整理的python二叉树的创建与遍历的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米9和小米9se的区别(我的小米云服务
- 下一篇: 哪种地暖性价比高