資料結構 基本樹的操作小結

2021-08-10 04:23:48 字數 1285 閱讀 7021

整理幾個樹的演算法。

1樹的複製:

每次遞迴建立乙個節點,此節點的左右孩子遞迴建立。

public static tree duplicate(tree root)

2樹的節點數:

左右子樹的節點個樹+1

public static int 

size(tree root)

3樹的深度:左右子樹中最深的那個+1是自身的深度

public static int 

depth(tree root)

4樹的非遞迴後序遍歷:

後續遍歷先遍歷左孩子,然後遍歷有孩子,最後遍歷自身。遞迴演算法都會考慮到用棧來解決。因此當要訪問此節點時要看一下這個節點的右孩子是否為空,或者右孩子被訪問過了。如果這個節點還有右孩子的話,將右孩子的所有左孩子壓入棧中(當前右孩子的也要如棧)

public static void 

postorder(tree root)else}}

}

5樹的非遞迴中序遍歷:中序遍歷while的終止條件發生變化,主要原因在於中序遍歷先列印根,再列印右孩子,列印完根的時候,棧就空了,後續遍歷最後列印根,因此後續遍歷的迴圈截止條件可以直接判斷是否為空即可。

public static void 

inorder(tree root)

if (!stack.isempty())

}}

6樹的非遞迴前序遍歷:樹的前序遍歷和中序遍歷非常相似,唯一不同的地方就是列印的為止放在了入棧的位置,而不是出棧的位置。

public static void 

preorder(tree root)

if (!stack.isempty())

}}

7樹的非遞迴層序遍歷:層序遍歷使用佇列就可以解決

public static void 

layerorder(tree root)

}

資料結構樹的基本操作 資料結構 樹的基本操作

include include include gtree.h include linklist.h typedefstruct tag gtreenode gtreenode 樹的節點 struct tag gtreenode gtreedata data 節點自身資料 gtreenode par...

資料結構樹基本操作

本章內容 樹的結構定義 遞迴的三種遍歷 非遞迴的三種遍歷 層次遍歷 求深度 求特定結點以及測試的主函式。include include define maxsize 50 二叉樹的鏈式儲存 typedef struct btnode btnode,tree 訪問改結點數值 void visit tr...

基本資料結構小結

陣列是一種線性表資料結構.它用一組連續的記憶體空間,來儲存一組具有相同型別的資料,連續的記憶體空間,保證陣列的資料都連續的分布在物理介質上.擁有隨機訪問和快速訪問的優勢,快速訪問 cpu讀取資料一般是取出一塊兒連續的記憶體空間,非常適合訪問陣列結構 但是有需要連續記憶體的缺點.鍊錶是一種物理儲存單元...