數據結構與算法--8.二叉樹的基礎知識

文章目錄

  • 一. 二叉樹基本概念
  • 二. 二叉樹的性質
  • 三. 二叉樹的代碼實現
  • 四. 二叉樹的先序、中序、后序遍歷

一. 二叉樹基本概念

在這里插入圖片描述

二. 二叉樹的性質

在這里插入圖片描述
在這里插入圖片描述

三. 二叉樹的代碼實現

class Node(object):"""二叉樹節點"""def __init__(self,item):self.elem = itemself.lchild = Noneself.rchild = Noneclass Tree(object):"""二叉樹"""def __init__(self):self.root = Nonedef add(self,item):node = Node(item)if self.root is None:self.root = nodereturnqueue = [self.root]while queue:cur_node = queue.pop(0)if cur_node.lchild is None:cur_node.lchild = nodereturnelse:queue.append(cur_node.lchild)if cur_node.rchild is None:cur_node.rchild = nodereturnelse:queue.append(cur_node.rchild)def breadth_travel(self):"""廣度遍歷"""if self.root is None:returnqueue = [self.root]while queue:cur_node = queue.pop(0)print(cur_node.elem)if cur_node.lchild is not None:queue.append(cur_node.lchild)if cur_node.rchild is not None:queue.append(cur_node.rchild)if __name__ == '__main__':tree = Tree()tree.add(0)tree.add(1)tree.add(2)tree.add(3)tree.add(4)tree.add(5)tree.add(6)tree.add(7)tree.add(8)tree.add(9)tree.breadth_travel()

四. 二叉樹的先序、中序、后序遍歷

class Node(object):"""二叉樹節點"""def __init__(self,item):self.elem = itemself.lchild = Noneself.rchild = Noneclass Tree(object):"""二叉樹"""def __init__(self):self.root = Nonedef add(self,item):node = Node(item)if self.root is None:self.root = nodereturnqueue = [self.root]while queue:cur_node = queue.pop(0)if cur_node.lchild is None:cur_node.lchild = nodereturnelse:queue.append(cur_node.lchild)if cur_node.rchild is None:cur_node.rchild = nodereturnelse:queue.append(cur_node.rchild)def breadth_travel(self):"""廣度遍歷"""if self.root is None:returnqueue = [self.root]while queue:cur_node = queue.pop(0)print(cur_node.elem)if cur_node.lchild is not None:queue.append(cur_node.lchild)if cur_node.rchild is not None:queue.append(cur_node.rchild)def preorder(self,node):"""先序遍歷"""if node is None:returnprint(node.elem,end=" ")self.preorder(node.lchild)self.preorder(node.rchild)def inorder(self,node):"""中序遍歷"""if node is None:returnself.inorder(node.lchild)print(node.elem,end=" ")self.inorder(node.rchild)def postorder(self,node):"""后序遍歷"""if node is None:returnself.postorder(node.lchild)self.postorder(node.rchild)print(node.elem,end=" ")if __name__ == '__main__':tree = Tree()tree.add(0)tree.add(1)tree.add(2)tree.add(3)tree.add(4)tree.add(5)tree.add(6)tree.add(7)tree.add(8)tree.add(9)tree.breadth_travel()# print(" ")tree.preorder(tree.root)print(" ")tree.inorder(tree.root)print(" ")tree.postorder(tree.root)print(" ")

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451898.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451898.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451898.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ZooKeeper(二)ZooKeeper能做什么?

上一節介紹了ZooKeeper的一些基礎知識,這一節主要講ZooKeeper有哪些用途。命名服務(Name Service) 主要是作為分布式命名服務,通過調用zk的create node api,能夠很容易創建一個全局唯一的path,這個path就可…

jquery vilidate 使用小例

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 // 修改$("#updForm").validate({submitHandler:function(form){new $.flavr({ content : 是否確認修改管理員?,dialog : co…

RedHat Linux 7.3基礎環境搭建

文章目錄1.更改主機名2.關閉selinux3.關閉火墻4.重啟機器5.設置ip6.掛載yum源7.升級openssh8.安全基線9.時區10.時間同步11.安裝Vmtools12&#x…

開源http協議庫curl和wget的區別和使用

curl和wget基礎功能有諸多重疊,如下載等。 在高級用途上的curl由于可自定義各種請求參數所以長于模擬web請求,用于測試網頁交互(瀏覽器);wget由于支持ftp和Recursive所以長于下載,用于下載文件(…

Spring聲明式事務管理、事務的傳播行為xml配置

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. <tx:method name"insert*" propagation"REQUIRED" />中name的值是ServiceImpl中各個要加入事物管理的方法…

數據結構與算法--9.常見時間復雜度及其之間的關系

文章目錄1.常見時間復雜度2.常見時間復雜度之間的關系1.常見時間復雜度 2.常見時間復雜度之間的關系

CodeIgniter中運用composer安裝依賴包

2019獨角獸企業重金招聘Python工程師標準>>> 基本信息 CodeIgniter 版本&#xff1a;3.1.8Nginx&#xff1a; Tengine/2.1.2 (nginx/1.6.2)MySQL&#xff1a; Ver 14.14 Distrib 5.6.33, for Linux (x86_64) using EditLine wrapperPHP&#xff1a; 5.6.30Zend Engi…

屏幕分辨率

http://cn.screenresolution.org/ 轉載于:https://www.cnblogs.com/qiqi715/p/9363587.html

數據結構與算法--10.利益最大值

1.題目 亞馬遜是一家納斯達克上市的公司&#xff0c;通過其財務報表我們可以解讀它在給定時期內的股票走勢信息。這些信息包括每天交易的最高價&#xff0c;最低價以及開盤價。假定你作為交易員&#xff0c;必須在股票開盤的時候做出買入或者賣出的決定。你負責設計一個算法&a…

shiro管理下MD5加密的使用

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 正文&#xff1a; package com.service.impl;import java.util.ArrayList;import java.util.List;import javax.annotation.Resource…

BZOJ2425:[HAOI2010]計數——題解

https://www.lydsy.com/JudgeOnline/problem.php?id2425 https://www.luogu.org/problemnew/show/P2518 你有一組非零數字&#xff08;不一定唯一&#xff09;&#xff0c;你可以在其中插入任意個0&#xff0c;這樣就可以產生無限個數。比如說給定{1,2},那么可以生成數字12,21…

java繼承的問題

一個父類對象變量可以引用該父類的任何一個子類的對象。 但是子類是不能引用父類對象的&#xff0c;這違反類 is-a的規則。

用 @Value(“${xxxx}“)注解從配置文件讀取值的用法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 用法&#xff1a; 從配置properties文件中讀取init.password 的值。 Value("${init.password}")private String initPwd…

scanf 輸入加逗號(或者不加逗號)出現的異常及解決方案

我們在寫 C 語言代碼通常 scanf 的格式控制部分都有兩種習慣&#xff0c;加逗號與不加逗號&#xff0c;而這兩種情況都會因為我們的不同輸入習慣產生一定的問題&#xff0c;這里給出另一種方法。 1、不加逗號 1 #include<stdio.h>2 3 #define SWAP(a, b) aa^b;ba^b;aa^b;…

ant介紹

一般情況下&#xff0c;大多數軟件公司做開發的時候都不用myeclipse開發&#xff0c;這是利用ant部署就給我們帶來極大的方便&#xff0c;它先將你的project打包成war包&#xff0c;然后部署到指定的服務器中。Ant的概念 當一個代碼項目大了以后&#xff0c;每次重新編譯&…

IT大牛說的話,不得不記

編程經典語錄收集 01. Walking on water and developing software from a specification are easy if both are frozen. – Edward V Berard 在水中行走&#xff0c;和根據一份需求開發軟件一樣&#xff0c;如果它們都“凍”住了&#xff0c;那就容易了。—— 愛德華貝拉爾德 0…

Showdoc 搭建項目 API 文檔系統

showdoc 是 PHP 開發的一款 api 文檔系統&#xff0c;因此所需環境和普通 PHP 項目一致 準備環境&#xff1a;php nginxcomposer //注意更換國內鏡像&#xff0c;否則速度會很慢&#xff0c;甚至失敗 創建項目 composer create-project showdoc/showdoc 配置 showdoc 寫權限 ch…