c++二叉鍊錶的模板實現
#pragma once
//二叉鍊錶的實現
#include #include #include using namespace std;
templatestruct binode
;templatestruct forpost
;templateclass bitree
~bitree()
void preorder()
void inorder()
void postorder()
void leverorder();
private:
binode* root;
binode* creat(binode* bt);
void release(binode* bt);
void preorder(binode* bt);
void inorder(binode* bt);
void postorder(binode* bt);
};//遞迴演算法
templatevoid bitree::preorder (binode* bt)
else }
templatevoid bitree::inorder (binode* bt)
else }
templatevoid bitree::postorder(binode* bt)
else }
// 1、佇列q初始化
// 2、如果二叉樹非空,將根指標入隊
// 3、迴圈直到佇列q為空
// 3.1、q=佇列q的隊頭元素出隊
// 3.2、訪問節點q的資料域
// 3.3、如節點q存在左孩子,則將左孩子指標入隊
// 3.4、如節點q存在右孩子,則將右孩子指標入隊
// templatevoid bitree::leverorder ()
queueq;
binode* q;
q[++rear] = root; //根指標入隊
while (front != rear) //當佇列非空
if (q->rchild != null)
}
}templatebinode* bitree::creat(binode* bt)
else
return bt;
};templatevoid bitree::release(binode* bt) }
//非遞迴
// 1、棧s初始化
// 2、迴圈直到bt為空且棧s為空
// 2.1、當bt不為空時迴圈
// 2.1.1、輸出bt->data
// 2.1.2、將指標bt儲存到棧中
// 2.1.3、繼續遍歷bt的左子樹
// 2.2、如果棧s不為空
// 2.2.1、將棧頂元素彈出至bt
// 2.2.2、準備遍歷bt右子樹
templatevoid bitree::preorder (binode* bt)
if (top != -1)
}
}templatevoid bitree::inorder (binode* bt)
if (top != -1)
}
}// 1、棧s初始化
// 2、迴圈直到bt為空且棧為空
// 2.1、當bt非空時迴圈
// 2.2.1、將bt連同標誌flag=1入棧
// 2.2.2、繼續遍歷bt的左子樹
// 2.2、當棧s非空且棧頂元素的標誌為2時,出棧並輸出棧頂結點
// 2.3、若棧非空,將棧頂元素的標誌改為2,準備遍歷棧頂結點的右子樹
templatevoid bitree::postorder (binode* bt)
while (top != -1 && s[top].flag = 2)
if (top != -1)
}
}
二叉查詢樹 模板實現 C
二叉查詢樹 模板實現 c 1 二叉查詢樹的性質 對於樹中每個結點x,它的左子樹中所有項的值小於x中的值,而它的右子樹中所有項的值大於x中的值。2 二叉樹的操作主要是 插入,刪除,查詢。2.1 查詢 contains 實現思路 如果待查詢的項x在樹中,返回true 否則返回false。若當前比較的結點...
c 模板實現 二叉查詢樹
搗鼓了乙個晚上,最後還是照著書本把這bst弄出來了。悲催的娃娃啊,不動手寫這個還真的很難啊!1 ifndef btree h 2 define btree h 34 include 5 using std ostream 67 template 8class bstree917 bstnode tr...
C 模板實現二叉搜尋樹
二叉搜尋樹的增刪該查操作實現 插入操作 借助輔助遞迴函式node insert node node,key key,value value 像根節點為node的二叉搜尋樹插入乙個資料,返回值為根節點,如果node null,那麼新建乙個節點返回,如果keykey,則插入到左子樹,當前返回的根節點為左...