二叉樹c 實現 資料結構與演算法 二叉樹基礎

2021-10-11 23:25:45 字數 2498 閱讀 1550

在介紹二叉樹之前,我們需要先明白什麼是樹,因為二叉樹是樹的其中一種,因為我們用的最多,所以我們大多都在學習和了解二叉樹。

是一種抽象資料型別或是實現這種抽象資料型別的資料結構,用來模擬具有樹狀結構性質的資料集合。它是由n(n>0)個有限節點組成乙個具有層次關係的集合。

樹具有以下特點:

樹還有一些專用的術語和概念,我們通過下邊這個圖為例來說明。

樹的種類有很多,不過最常用的還是二叉樹

二叉樹,顧名思義,我們就能知道每個節點最多有兩個子節點,分別稱為左子節點和右子節點。當然,並不是每個節點都有兩個節點,也可能有的只有左子節點,有的只有右子節點。

二叉樹中有兩種特殊的型別,滿二叉樹完全二叉樹

葉子節點全部都在最底層,除葉子節點外,每個節點都有兩個子節點,這種二叉樹稱作滿二叉樹(如下圖)。

在一顆二叉樹中,若除最後一層外的其餘層都是滿的,並且最後一層要麼是滿的,要麼在右邊缺少連續若干節點,則此二叉樹為完全二叉樹(如下圖)。

我們上面已經基本了解了什麼是二叉樹,那麼我們在使用的時候是怎麼來儲存的呢?

我們首先來看順序儲存法。我們把根節點放在索引為

我們再來看一下鏈式儲存法。鏈式儲存法比較簡單直觀。每個節點儲存三個字段,其中乙個是該節點的資料,另外兩個是指向左右子節點的指標。我們只要通過根節點,就可以通過左右子節點的指標,把整棵樹都串起來。這也是我們比較常用的儲存方式。大部分的二叉樹也都是通過這種結構實現的。

前邊說了定義和儲存方法,現在我們來看一下二叉樹的遍歷(面試常問)。

怎樣把二叉樹的所有節點都輸出出來呢,有三種常用的方法,前序遍歷、中序遍歷和後序遍歷。他們的不同在於輸出節點和它左右子節點的先後順序。

前序遍歷是指,對於二叉樹的任意節點,我們首先輸出該節點,然後輸出它的左子樹,最後輸出它的右子樹。

我們來看一下具體的**實現:

//節點結構類

class treenode

}//前序遍歷,遞迴實現

public void preorderre(treenode node)

treenode rightnode = node.right;

if(rightnode != null)

}//前序遍歷,借用棧實現

public void preorder(treenode node)

else}}

中序遍歷是指,對於樹中的任意節點,我們首先輸出它的左子樹,然後再輸出它本身,最後輸出它的右子樹。

我們來看一下具體的**實現:

//中序遍歷,遞迴實現

public void midorderre(treenode node)

system.out.println(node.value);

treenode rightnode = node.right;

if(rightnode != null)

}//中序遍歷,借用棧實現

public void midorder(treenode node)

else}}

後序遍歷是指,對於樹中的任意節點來說,我們首先輸出它的左子樹,然後再輸出它的右子樹,最後輸出這個節點本身。

我們來看一下具體的**實現:

//後序遍歷,遞迴實現

public void postorderre(treenode node)

treenode rightnode = node.right;

if(rightnode != null)

system.out.println(node.value);

}//後序遍歷,借用棧實現

public void postorder(treenode node)

else

}while(output.size() > 0)

}

以上就是樹和二叉樹一些基礎的知識,我們來總結回顧一下。我們講了一種非線性資料結構,樹有幾個比較常用的概念我們需要了解和掌握:根節點、葉子節點、父節點、子節點、兄弟節點,還有節點的高度、深度、層數,以及樹的高度

我們最常用的樹就是二叉樹。二叉樹每個節點最多有兩個子節點,左子節點右子節點。我們又介紹了兩種比較特殊的樹,滿二叉樹完全二叉樹,滿二叉樹其實也屬於完全二叉樹。

二叉樹的儲存方式有順序儲存鏈式儲存。順序儲存比較適合完全二叉樹,會更充分利用記憶體空間而不會造成浪費。鏈式儲存是比較簡單直觀,也是比較常用的儲存方法。還有非常重要的二叉樹前、中、後序遍歷,是我們必須要掌握的。

資料結構 二叉樹 反轉二叉樹

include using namespace std define maxsize 1000 struct binary tree node class queue queue queue void queue push binary tree node btn binary tree node ...

演算法與資料結構 二叉樹

二叉樹 binary tree 二分樹 二元樹 二叉樹的遞迴定義 或是空樹,或是一棵由乙個根結點和左右子樹組成的樹,且左右子樹也是二叉樹。分枝結點 除葉結點以外的結點。二叉樹的性質 最多 2 h 1 個結點 n2 n0 1 滿二叉樹 所有分枝結點都存在左右子樹,且葉結點都在同一層。完全二叉樹 除最後...

資料結構與演算法 二叉樹

1.普通二叉樹 treenode package math public class treenode public void setdata int data public treenode getlchild public void setlchild treenode lchild publi...