1. 程式人生 > >二叉樹及的性質及二叉樹的Python實現

二叉樹及的性質及二叉樹的Python實現

樹形結構是一類非常重要的非線性資料結構,其中樹和二叉樹最為常用。

二叉樹的特點是每個節點至多隻有兩棵子樹,且二叉樹的子樹有左右之分,其次序不能任意顛倒。

二叉樹的性質:

性質 1. 在二叉樹的第層上至多有個結點

性質 2. 深度為的二叉樹至多有個結點,

性質 3. 對任何一個二叉樹,如果其終端結點數為,度為2的結點數為,則

一棵深度為且有個結點的二叉樹稱為滿二叉樹。深度為的,有個結點的二叉樹,當且僅當其每一個結點都與深度為的滿二叉樹中編號從1至n的結點一一對應時,稱之為完全二叉樹

完全二叉樹的特點:(1)葉子結點只可能在層次最大的兩層上出現;(2)對任一結點,若其右分支下的子孫的最大層次為,則其左分支下的子孫的最大層次必為

性質 4. 具有個結點的完全二叉樹的深度為

二叉樹的實現

class Node:
    def __init__(self,data):
        self.data = data
        self.lchild = None
        self.rchild = None
class BinaryTree:
    def __init__(self):
        self.root = None

    # 建立二叉樹
    def CreatBiTree(self,node):
        self.root = node
    # 銷燬二叉樹
    def DestroyBiTree(self):
        self.root = None
    # 清空二叉樹
    def ClearBiTree(self):
        self.root.lchild = None
        self.root.rchild = None
    # 判斷二叉樹是否為空
    def BiTreeEmpty(self):
        if self.root == None:
            return False
        return True
    
    # 先序遍歷二叉樹
    def PreOrderTraverse(self,root):
        self.root = root
        if self.root == None:
            return False

        if root:
            print('{} -> '.format(root.data),end = '')
            self.PreOrderTraverse(root.lchild)
            self.PreOrderTraverse(root.rchild)

    # 中序遍歷二叉樹
    def InOrderTraverse(self,root):

        if root:
            self.InOrderTraverse(root.lchild)
            print('{} -> '.format(root.data), end='')
            self.InOrderTraverse(root.rchild)
    # 後序遍歷二叉樹
    def PostOrderTraverse(self,root):
        if root:
            self.PostOrderTraverse(root.lchild)
            self.PostOrderTraverse(root.rchild)
            print('{} -> '.format(root.data), end='')
    # 層序遍歷二叉樹
    def LevelOrderTraverse(self):
        pass

相關推薦

查詢與紅黑概念性質操作時間複雜度

操作名(h樹高) 二叉查詢數 紅黑樹 查詢 O(h) O(lgn) 查最大/小元素 O(h) O(lgn) 前驅/後繼 O(h) O(lgn) 插入 O(h) O(lgn) 刪除 O(h) O(lgn)

資料結構——性質的建立,遍歷,插入,列印,查詢左右兄弟等

#include<iostream> #include<string> #include<stack> using namespace std; #define MAX(x,y) (x) >= (y)?(x):(y) /* 結點的層

的深度[劍指offer]之python實現

題目描述 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。 題目連結 -*- coding:utf-8 -*- # clas

的映象[劍指offer]之python實現

題目描述 操作給定的二叉樹,將其變換為源二叉樹的映象。 輸入描述: 二叉樹的映象定義:源二叉樹 8 / \ 6 1

階等差數列的性質應用

2, 3, 5, 8, 12, 17 … 1. 通項的證明 首先是一階等差數列,也即通常所說的等差數列:a1,a2,…,an,滿足: a2−a1=d…an−an−1=d 第 n 項 an

原型聚類()學習向量量化(LVQ)和python實現

學習向量量化(Learning Vector Quantization,LVQ)和k-means類似,也屬於原型聚類的一種演算法,不同的是,LVQ處理的是有標籤的樣本集,學習過程利用樣本的標籤進行輔助聚類,個人感覺這個演算法更像是一個分類演算法。。。 若存在一個

,機器學習演算法之邏輯迴歸(python實現

邏輯迴歸(Logistic Regression)是目前流行最廣泛的演算法之一。 1. 何為邏輯迴歸:        邏輯迴歸主要思想是根據現有的訓練集(資料)進行分類,判斷這些資料屬於哪一個類別,通

機器學習筆記()矩陣和線性代數 例:用Python實現SVD分解進行圖片壓縮

線性代數基本只要是理工科,都是必修的一門課。當時學習的時候總是有一個疑惑,這個東西到底是幹嘛用的?為什麼數學家發明出這麼一套方法呢,感覺除了解方程沒發現有什麼大用啊!但隨著學習的深入,慢慢發現矩陣的應

的定義、性質常見題

滿足以下兩個條件的樹形結構叫做二叉樹 1.每個結點的度都不大於2 2.每個結點的孩子次序不能顛倒 性質 在二叉樹的第i層上至多有2^(i-1)個結點 深度為k的二叉樹上至多有2^k-1個結點 對任何一棵二叉樹,若它含有n0 個葉子結點、n2 個度為

決策ID3;C4.5詳解和python實現與R語言實現比較

本文網址:http://blog.csdn.net/crystal_tyan/article/details/42130851(請不要在採集站閱讀) 把決策樹研究一下,找來了一些自己覺得還可以的資料: 分類樹(決策樹)是一種十分常用的分類方法。他是一種監管學習,所謂監管

性質Python實現

樹形結構是一類非常重要的非線性資料結構,其中樹和二叉樹最為常用。二叉樹的特點是每個節點至多隻有兩棵子樹,且二叉樹的子樹有左右之分,其次序不能任意顛倒。二叉樹的性質:性質 1. 在二叉樹的第層上至多有個結

基本概念性質

二叉樹基本概念: 在電腦科學中,二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree)。二叉樹常被用於實現二叉查詢樹和二叉 堆。二叉樹的每個結點至多隻有二棵子樹(不存在度大於2的結點),二叉樹的

的基本性質證明

性質1:一棵非空二叉樹的第i層上最多有2^(i-1)個結點,(i>=1)。 性質2:一棵深度為k的二叉樹中,最多具有2^k-1個結點,最少有k個結點。 性質3:對於一棵非空的二叉樹,度為0的結點

機器學習筆記(5)——C4.5決策中的連續值處理和Python實現

在ID3決策樹演算法中,我們實現了基於離散屬性的決策樹構造。C4.5決策樹在劃分屬性選擇、連續值、缺失值、剪枝等幾方面做了改進,內容較多,今天我們專門討論連續值的處理和Python實現。 1. 連續屬性離散化 C4.5演算法中策略是採用二分法將連續屬性離散化處理:假定

的五大性質證明

二叉樹(Binary Tree) 定義:一棵二叉樹是結點的一個有限集合,該集合或者為空,或者是由一個根結點加上兩棵分別稱為左子樹和右子樹的、互不相交的二叉樹組成。 特點:每個結點至多隻有兩棵子樹(二叉樹中不存在度大於2的結點) 五種形態: 1. 性質1

決策(基於增益率)之python實現

如圖,為使用到的公式,資訊熵表明樣本的混亂程度,增益表示熵減少了,即樣本開始分類,增益率是為了平衡增益準則對可取值較多的屬性的偏好,同時增益率帶來了對可取值偏小的屬性的偏好,實際中,先用增益進行篩選,選取大於增益平均值的,然後再選取其中增益率最高的。 以下程式碼純粹手寫,未參考其他人程式碼,如果問題,請不吝

的建立遞歸遍歷

art 先序 popu dsm ostream != 方式 mat trac huangjing 二叉樹的的建立方式為前序 二叉樹有三種遍歷 前序遍歷(NLR) 中序遍歷(LNR) 興許遍歷(LRN) 非遞歸的算法明天補上 代碼為: #include<i

1 數據結構(13)_的概念常用操作實現

做什麽 != 後繼 switch 繼承 mem bad 葉子 static 1. 樹到二叉樹的轉換 思考:通用樹結構的實現太過復雜(樹中每個結點都可以有任意多的孩子,具有多種形態),工程中很少會用到如此復雜的樹是否可以簡化呢?思路:減少樹結點中孩子的數量。但這樣樹是否還能通

的概念建立

二叉樹的概念 一棵二叉樹是結點的一個有限集合,該集合或者為空,或者是由一個根節點加上兩棵分別稱為左子樹和右子樹的二叉樹組成。 二叉樹的形式 二叉樹的性質 1.若規定根節點的層數為1,則一棵非空二叉樹的第i層上最多有2^(i-1)(i>0)個結

資料結構—的建立輸出-遞迴

二叉樹的建立及輸出,問題描述: (1)前序輸入結點,用”#“表示空指標 (2)前序遍歷二叉樹 (3)中序遍歷二叉樹 (4)後序遍歷二叉樹 (5)求二叉樹的長度 (6)求二叉樹的葉子結點 #include<stdlib.h> #include<stdio.h> #i