日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

树结构之树和二叉树的概念以及如何用面向对象思想进行结构定义01

發布時間:2025/3/19 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树结构之树和二叉树的概念以及如何用面向对象思想进行结构定义01 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

樹和二叉樹的概念及結構定義

  • 前言
  • 一、樹的基本概念及代碼層面如何定義
    • 1、樹的概念
    • 2、代碼層面樹如何定義
  • 二、二叉樹的基本概念及代碼層面如何定義
    • 1、二叉樹的概念
    • 2、代碼層面二叉樹如何定義
    • 3、二叉樹的性質
  • 三、幾種特殊的二叉樹
    • 1、真二叉樹
    • 2、滿二叉樹
      • 滿二叉樹定義及圖例
      • 滿二叉樹的性質
    • 3、完全二叉樹
      • 完全二叉樹的定義及圖例
      • 完全二叉樹的性質
  • 總結


前言

二叉樹是一種樹形數據結構,在日常生活中也有廣泛的運用,比如windows操作系統中文件夾的目錄結構可以看成一種運用。


一、樹的基本概念及代碼層面如何定義

1、樹的概念

一個普通的樹如下圖所示:

樹中“度”的概念如下:

  • 節點的度:可以看到①節點的度為4,②節點的度為1,③節點的度為2,④節點的度為1,⑤節點的度為0,即度代表當前節點子樹的個數。
  • 樹的度:所有節點中度的最大值,上面這幅圖的樹的度就是節點①的度。
  • 葉子節點的度都為0。
  • 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,(即最多擁有2棵子樹)。
  • 即使某個節點只有一顆子樹,也要區分左子樹還是右子樹。
  • 二叉樹如下圖所示:

    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、二叉樹的性質

  • 非空二叉樹的第i層,最多有2i?12^{i-1}2i?1個節點(i>=1);
  • 在高度為h的二叉樹上最多有2h?12^h-12h?1個節點(h>=1);
  • 對于任何一棵非空二叉樹,如果葉子節點個數為n0,度為2的節點個數為n2,則有n0=n2+1;
  • 假設度為1的節點個數為n1,那么二叉樹的節點總數n=n0+n1+n2;
  • 二叉樹的邊數T=n1+2*n2=n1+n2+n2=n-n0+n0-1=n-1;即等于總節點數n-1;
  • 三、幾種特殊的二叉樹

    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、完全二叉樹

    完全二叉樹的定義及圖例

    定義:對節點從上至下、從左至右開始編號,其所有編號都能與相同高度的滿二叉樹中的編號對應。圖例如下所示:

    特點:

  • 葉子節點只會出現在最后2層,最后一層的葉子節點都靠左對齊。
  • 完全二叉樹從根節點至倒數第二層是一顆滿二叉樹。
  • 滿二叉樹一定是完全二叉樹,完全二叉樹不一定是滿二叉樹。
  • 完全二叉樹的性質

  • 度為1的節點只有左子樹。
  • 度為1的節點要么是1個,要么是0個。
  • 同樣節點數量的二叉樹,完全二叉樹的高度最小。
  • 假設完全二叉樹的高度為h(h>=1),那么這顆完全二叉樹至少有2h?12^{h-1}2h?1個節點(202^020+212^121+222^222+…+2h?22^{h-2}2h?2+1),最多有2h?12^h-12h?1個節點,也就是滿二叉樹。
  • 一顆有n個節點的完全二叉樹(n>0),從上到下,從左到右對節點從1開始進行編號,對任意第i個節點有如下特點:
    ①如果i=1,它是根節點。
    ②如果i>1,它的父節點編號為floor(i/2),即(i/2)向下取整。
    ③如果2i<=n,它的左子節點編號為2i。
    ④如果2i>n,它沒有子左節點。
    ⑤如果2i+1<=n,它的右子節點編號為2i+1。
    ⑥如果2i+1>n,它沒有子右節點。

    性質5要著重掌握,因為堆排序就用到了完全二叉樹。
  • 總結

    本篇介紹了最基本的樹和二叉樹以及二叉樹中的幾種特殊二叉樹,本篇最為重要的是要掌握樹和二叉樹的結構定義,即如何通過面向對象的思想來定義樹或者節點,要考慮到它們之間的聯系,這樣才能熟練的掌握面向對象思想。

    總結

    以上是生活随笔為你收集整理的树结构之树和二叉树的概念以及如何用面向对象思想进行结构定义01的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。