python 二叉樹實現

來源:互聯網
上載者:User

標籤:after   開始   turn   添加   lis   int   child   roo   arch   

二叉樹實現思想

  1、把每個節點都看作是一個對象包含以下特徵:

      節點的當前值

      節點的左孩子(儲存比當前節點值小的節點對象)

      節點右孩子(儲存比當前節點值大的節點對象)

  2、二叉樹就是以根節點開始的連續的對象串

代碼實現:
# -*- coding:utf-8  -*-# 日期:2018/6/12 8:09# Author:小滑鼠# 節點對象class Node:    def __init__(self):        self.left_children = None        self.right_children = None        self.value = None# 二叉樹對象class tree:    def __init__(self):        self.root = False        self.front_list = []        self.middle_list = []        self.after_list = []    # 產生二叉樹    def create_tree(self,n=0,l=[]):        if l == []:            print("傳入的列表為空白")            return        if n > len(l)-1:            print("二叉樹產生")            return        node = Node()        node.value = l[n]        if not self.root:           self.root = node           self.list = l        else:            self.add(self.root,node)        self.create_tree(n+1,l)    # 添加節點    def add(self,parent,new_node):        if new_node.value > parent.value:            # 插入值比父親值大,所以在父節點右邊            if parent.right_children == None:                parent.right_children = new_node            else:                self.add(parent.right_children,new_node)        else:            # 插入值比父親值小,所以在父節點左邊            if parent.left_children == None:                parent.left_children = new_node            else:                self.add(parent.left_children,new_node)    # 前序(先中再左最後右)    def front(self,node=None):        if node == None:            node = self.root        # 輸出當前節點        self.front_list.append(node.value)        # 先判斷左枝        if not node.left_children == None:            self.front(node.left_children)        # 再判斷右枝        if not node.right_children == None:            self.front(node.right_children)        # 返回最終結果        return self.front_list    # 中序(先左再中最後右)    def middle(self,node=None):        if node == None:            node = self.root        # 先判斷左枝        if not node.left_children == None:            self.middle(node.left_children)        # 輸出當前節點        self.middle_list.append(node.value)        # 再判斷右枝        if not node.right_children == None:            self.middle(node.right_children)        return self.middle_list    # 後序(先左再右最後中)    def after(self,node=None):        if node == None:            node = self.root        # 先判斷左枝        if not node.left_children == None:            self.after(node.left_children)        # 再判斷右枝        if not node.right_children == None:            self.after(node.right_children)        self.after_list.append(node.value)        return self.after_list    # 搜尋    def search(self,v,node=None):        if node == None:            node = self.root        if node.value == v:            return True        if v > node.value:            if not node.right_children == None:                return self.search(v, node.right_children)        else:            if not node.left_children == None:                return self.search(v, node.left_children)        return Falseif __name__ == ‘__main__‘:    # 需要建立二叉樹的列表    list = [4, 6, 3, 1, 7, 9, 8, 5, 2]    t = tree()    t.create_tree(0,list)    res = t.front()    print(‘前序‘,res)    res = t.middle()    print(‘中序‘,res)    res = t.after()    print(‘後序‘,res)    i = t.search(8)    print(‘8是否在二叉樹中‘,i)

  中心就是遞迴判斷傳值,遞迴取值,很簡單,下一步就是最佳化二叉樹,二叉樹的左旋,右旋,實現平衡二叉樹。

      

python 二叉樹實現

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.