树结构之树和二叉树的概念以及如何用面向对象思想进行结构定义01
樹和二叉樹的概念及結構定義
- 前言
- 一、樹的基本概念及代碼層面如何定義
- 1、樹的概念
- 2、代碼層面樹如何定義
- 二、二叉樹的基本概念及代碼層面如何定義
- 1、二叉樹的概念
- 2、代碼層面二叉樹如何定義
- 3、二叉樹的性質
- 三、幾種特殊的二叉樹
- 1、真二叉樹
- 2、滿二叉樹
- 滿二叉樹定義及圖例
- 滿二叉樹的性質
- 3、完全二叉樹
- 完全二叉樹的定義及圖例
- 完全二叉樹的性質
- 總結
前言
二叉樹是一種樹形數據結構,在日常生活中也有廣泛的運用,比如windows操作系統中文件夾的目錄結構可以看成一種運用。
一、樹的基本概念及代碼層面如何定義
1、樹的概念
一個普通的樹如下圖所示:
樹中“度”的概念如下:
2、代碼層面樹如何定義
概念介紹完了,當我們程序員看到這張圖的時候,我們腦海里首先想到的應該是如何從代碼層面來構造這棵樹?比如樹的定義,樹中節點的定義?只有將樹的結構清晰明白的定義好,才有利于后期的編程。
public class Tree<E>{//代表節點數量int size;//代表根節點Node<E> root;static class Node<E>{//節點中存儲什么數據類型,這邊使用的是泛型E element;//當前節點的子節點應該用什么存儲,可以用集合進行存儲List<Node> nexts;//這邊也可以記錄當前節點的父節點Node<E> parent;} }面向對象的思想講起來比較簡單,但是想通過這種思想來解決實際問題,還需要多加練習,比如上面這顆樹,我們單獨將“樹”這個整體拿出來做一個對象,將樹中的節點作為另一個對象,這樣的設計就比較清晰。
到后面的二叉搜索樹,AVL樹中,可以針對Node節點和Tree樹這個整體提供不同的方法,比如Node節點中可以提供計算當前節點高度的方法,Tree樹中可以提供以變量root為根節點的樹是不是完全二叉樹的判斷方法、以及前中后序遍歷等方法。
二、二叉樹的基本概念及代碼層面如何定義
1、二叉樹的概念
二叉樹如下圖所示:
2、代碼層面二叉樹如何定義
二叉樹的數據結構如何定義呢?要以面向對象的思想來思考,二叉樹中的節點是對象,那么我們可以將其進行單獨封裝,樹本身也是對象,我們也將其單獨封裝,只有在編程過程中不斷思考,面向對象的設計方法才會顯得愈發深刻。
public class Tree<E>{//二叉樹的節點數量int size;//二叉樹的根節點Node<E> root;static class Node<E>{//二叉樹節點中存儲的元素E element;//左子樹Node<E> left;//右子樹Node<E> right;//父節點Node<E> parent;}}3、二叉樹的性質
三、幾種特殊的二叉樹
1、真二叉樹
真二叉樹定義:所有節點的度要么為0要么為2。如下圖所示,
左圖是真二叉樹,除了葉子節點度為0,其余節點度為2,沒有度為1的節點。
右圖是非真二叉樹,③節點的度為1。
2、滿二叉樹
滿二叉樹定義及圖例
定義:最后一層節點的度為0,其余節點的度為2。圖例如下所示:
滿二叉樹的性質
性質:①在同樣高度的二叉樹中,滿二叉樹的葉子結點數量最多、總結點數量最多。
②滿二叉樹一定是真二叉樹,真二叉樹不一定是滿二叉樹。
③假設滿二叉樹的高度為h(h>=1),那么第i層的節點數量:2i?12^{i-1}2i?1
,葉子節點數量2h?12^{h-1}2h?1,總節點數量n=2h?12^h-12h?1=202^020+212^121+222^222+…+2h?12^{h-1}2h?1。
3、完全二叉樹
完全二叉樹的定義及圖例
定義:對節點從上至下、從左至右開始編號,其所有編號都能與相同高度的滿二叉樹中的編號對應。圖例如下所示:
特點:
完全二叉樹的性質
①如果i=1,它是根節點。
②如果i>1,它的父節點編號為floor(i/2),即(i/2)向下取整。
③如果2i<=n,它的左子節點編號為2i。
④如果2i>n,它沒有子左節點。
⑤如果2i+1<=n,它的右子節點編號為2i+1。
⑥如果2i+1>n,它沒有子右節點。
性質5要著重掌握,因為堆排序就用到了完全二叉樹。
總結
本篇介紹了最基本的樹和二叉樹以及二叉樹中的幾種特殊二叉樹,本篇最為重要的是要掌握樹和二叉樹的結構定義,即如何通過面向對象的思想來定義樹或者節點,要考慮到它們之間的聯系,這樣才能熟練的掌握面向對象思想。總結
以上是生活随笔為你收集整理的树结构之树和二叉树的概念以及如何用面向对象思想进行结构定义01的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何才能轻而易举的写出递归函数
- 下一篇: LeetCode14 最长公共前缀