資料結構 筆記:樹中結點的刪除操作
刪除的方式
-基於資料元素值的刪除
·SharedPointer<Tree<T>>remove(const T& value)
-基於結點的刪除
·SharedPointer<Tree<T>> remove(TreeNode<T>* node)
刪除操作成員函式的設計要點
-將被刪除結點所代表的子樹進行刪除
-刪除函式返回一顆堆空間中的樹
-具體返回值為指向樹的智慧指標物件
當需要從函式中返回堆中的物件時,使用智慧指標(SharedPointer)作為函式的返回值,防止記憶體洩露。
刪除操作功能的定義
-void remove(GTreeNode<T>* node,GTree<T>*& ret)
·將node為根結點的子樹從原來的樹中刪除
·ret作為子樹返回(ret指向堆空間中樹物件)
總結:
-刪除操作將目標結點所代表的子樹移除
-刪除操作必須完善處理父結點和子結點的關係
-刪除操作的返回值為指向樹的智慧指標物件
-函式中返回堆中的物件時,使用智慧指標作為返回值
相關推薦
資料結構 筆記:樹中結點的刪除操作
刪除的方式 -基於資料元素值的刪除 ·SharedPointer<Tree<T>>remove(const T& value) -基於結點的刪除 ·SharedPointer<Tree<T>> remove(TreeNode&l
資料結構 筆記:樹中結點的插入操作
插入的方式 -插入新結點 ·bool insert(TreeNode<T>* node) -插入資料元素 ·bool insert(const T& value,TreeNode<T>* parent) 如何指定新結點在樹裡面的位置 插入新結點
資料結構 筆記:樹中結點的查詢操作
查詢的方式 -基於資料元素值的查詢 ·GTreeNode<T>* find(const T& value) const -基於結點的查詢 ·GTreeNode<T>* find(TreeNode<T>* node) const 基於資料
資料結構 筆記:樹中屬性操作的實現
樹中結點的數目 -定義功能:count(node) ·在node為根結點的樹中統計結點的數目 int count(GTreeNode<T>* node) const { int ret = 0; if(node != NULL)
資料結構 筆記:樹的定義與操作
樹是一種非線性的資料結構 樹是由n(n>=0)個結點組成的有限集合 -如果 n = 0,成為空樹; -如果n > 0,則: ·有一個特定的稱之為根(root)的結點 ·根據點只有直接後繼,但沒有直接前驅 ·除根以外的其他結點劃分為m(m>=0)個互補相交的有
資料結構 筆記:樹節點中的清除操作
清除操作的定義 -void clear() ·將樹中的所有結點清除(釋放堆中的結點) 清除操作功能的定義 -free(node) ·清除node為根結點的樹 ·釋放樹中的每一個結點 樹中的結點可能來源於不用儲存空間,如何判斷堆空間的結點並釋放? -單憑記憶體地址很難準
資料結構 筆記:樹到二叉樹的轉換
通用樹結構的回顧 -雙親孩子表示法 ·每個結點都有一個指向其雙親的指標 ·每個結點都有若干個指向其孩子的指標 另一種屬性結構模型 -孩子兄弟表示法 ·每個節點都有一個指向其第一個孩子的指標 ·每個節點都有一個指向其第一個右兄弟的指標 孩子兄弟表示法的特點 -能夠表
資料結構 筆記:樹的儲存結構與實現
樹的結點的儲存結構 GTreeNode的設計與實現 template<typename T> class GTreeNode : public TreeNode<T> { public: LinkList<GTreeeNode<T>*&
資料結構 筆記:圖的定義與操作
定義 -圖是由頂點集合(Vertex)及頂點間的關係集合(Edge)組成的一種資料結構 -Graph = (V,E) -V= 是頂點的有窮非空集合 -E=是頂點之間關係的有窮集合 無向邊 -頂點x和y之間的邊沒有方向,則稱該邊為無向邊 -<x,y> 與<
資料結構 筆記:二叉樹中的結點刪除與清除
刪除的方式 -基於資料元素值的刪除 ·SharedPointer<Tree<T>>remove(const T& value) -基於結點的刪除 ·SharedPointer<Tree <T>>remove(TreeNode&l
資料結構 筆記:二叉樹中的結點插入操作
是否能夠在二叉樹的而已結點出插入子結點? -不能,二叉樹結點的每個結點的子結點是固定的,只存在左孩子和右孩子. 是否需要指定新資料元素(新結點)的插入位置? -需要指定為左孩子或者右孩子 enum BTNodePos { ANY, LEFT, RIGHT };
資料結構 筆記:二叉樹中的結點查詢操作
查詢的方式 -基於資料元素值的查詢 ·BTreeNode<T>* find(const T& value) const -基於結點的查詢 ·BTreeNode<T>* find(TreeNode<T>* node) const 基於資料
資料結構 筆記:二叉樹中屬性操作的實現
二叉樹的屬性操作 count() = 10; height() = 4; degree() = 2; 二叉樹結點的數目 -定義功能:count(node) ·在node為根結點的二叉樹中統計結點數目 int count(BTreeNode<T>* nod
資料結構 筆記:二叉樹的儲存結構設計
設計要點 -BTree為二叉樹結構,每個結點最多隻有兩個後繼結點 -BTreeNode只包含4個固定的共有成員(哪4個?) -實現樹結構的所有操作(增,刪,查,等) BTreeNode的設計與實現 template <typename T> class BTreeNo
資料結構 筆記:二叉樹的深層特性
性質1 -在二叉樹的第i層最多有個2^(i-1)個結點。(i>=1) 性質2 高度為k的二叉樹最多有2^k-1個結點。(k>=0) 性質3 對任何一棵二叉樹,如果其葉節點有N0個,度為2的非葉節點有n2個,則有n0 = n2 + 1. 性質4 具有n個結點的完
資料結構 筆記:二叉樹結構的層次遍歷
二叉樹的遍歷 -二叉樹的遍歷(Traversing Binay Tree)是指從根節點觸發,按照某種次序一次訪問二叉樹中的所有結點,使得每個結點被訪問一次,且僅被訪問一次。 通用樹結構的層次遍歷演算法是否可以用在二叉樹結構上? 如果可以,程式碼需要做怎樣的改動? 提供一組遍歷相關的函
資料結構 筆記:二叉樹的比較與相加
二叉樹的克隆操作 -SharedPointer<BTree<T>> clone() const ·克隆當前樹的一份拷貝 ·返回值為堆空間中的一棵新二叉樹(與當前樹相等) 二叉樹的克隆 -定義功能:clone(node) ·拷貝node為根節點的二叉樹(
資料結構 筆記:二叉樹的典型遍歷方式
二叉樹是否只有一種遍歷方式(層次遍歷)? 典型的二叉樹遍歷方式 -先序遍歷(Pre-Order Traversal) -中序遍歷(In-Order Traversal) -後序遍歷(Post-Order Traversal) 先序遍歷(Pre-Order Traversal)
資料結構 筆記:程式演算法的選擇
如果兩個演算法都滿足功能性需求,那工程中最關心的其他特性是什麼?如何比較評判呢? ps:價效比(效率)是工程中最關注的演算法附加特性! 事後統計法 -比較不同演算法對同一組輸入資料的執行處理時間 -缺陷 ·為了獲得不同演算法的執行時間必須編寫相應程式 ·執行時間嚴重依賴硬體以
資料結構 筆記:程式的靈魂
資料結構靜態的描述了資料元素之間的掛你 高效的程式需要在資料結構的基礎上設計和選擇演算法 演算法是特定問題求解步驟的描述 在計算機中表現為指令的有限序列 算是獨立存在的一種解決問題的方法和思想,對於演算法而言,語言並不重要,重要的是思想。 演算法的特性: -輸入:演算法具有0