C 二叉樹實現

2021-09-21 07:02:34 字數 3270 閱讀 5464

二叉樹節點類:

/*二叉樹結點類bintreenode宣告*/

templateclass bintreenode

bintreenode * getleft()

bintreenode * getright()

t& getdata()

void setleft(bintreenode * left)

void setright(bintreenode * right)

void setdata(const t& item)

};

二叉樹類:

/*二叉樹類bintree宣告*/

templateclass bintree //建構函式

virtual~bintree() //析構函式,刪除整棵二叉樹

//在以結點t為根節點的子樹中搜尋結點p的父節點

bintreenode* getfather(bintreenode* t, bintreenode* p);

//在以結點t為根結點的子樹中查詢data域為item的結點

bintreenode* find(bintreenode* t, const t& item);

//從樹中刪除結點t及其左右子樹(包括刪除之後的一些列更新操作)

void delsubtree(bintreenode* t);

//刪除結點t及其左右子樹

void del(bintreenode* t);

//先根遍歷並輸出以結點t為根結點的子樹

void preorder(bintreenode* t);

//中根遍歷並輸出以結點t為根節點的子樹

void inorder(bintreenode* t);

//後根遍歷並輸出以結點t為根結點的子樹

void postorder(bintreenode* t);

//層次遍歷並輸出以結點t為根結點的子樹

void levelorder(bintreenode* t);

//非遞迴先根遍歷並輸出以結點t為根結點的子樹

void norecpreorder(bintreenode* t);

//非遞迴中根遍歷並輸出以結點t為根結點的子樹

void norecinorder(bintreenode* t);

//非遞迴後根遍歷並輸出以結點t為根節點的子樹

void norecpostorder(bintreenode* t);

//建立二叉樹

void createbintree(t stop);

//建立一棵二叉樹並返回該二叉樹的根結點

bintreenode* create();

//複製以結點t為根節點的二叉樹

bintreenode* copytree(bintreenode* t);

//其他操作

bintreenode* getroot()

void setroot(bintreenode* t)

t getstop()

void setstop(const t& stop)

bool isempty()

};/*非遞迴後根遍歷演算法中的輔助結點類*/

templateclass assbintreenode

int getflag()

void setflag(int i)

bintreenode* getptr()

void setptr(bintreenode* p)

};templateinline bintreenode* bintree::getfather(bintreenode* t, bintreenode* p)

templateinline bintreenode* bintree::find(bintreenode* t, const t & item)

templateinline void bintree::delsubtree(bintreenode* t)

bintreenode* p=t, * q;

q = getfather(root, t);//找到t的父結點p

if (q)

del(p);

}templateinline void bintree::del(bintreenode* t)

}templateinline void bintree::preorder(bintreenode* t)

}templateinline void bintree::inorder(bintreenode* t)

}templateinline void bintree::postorder(bintreenode* t)

}templateinline void bintree::levelorder(bintreenode* t)

}templateinline void bintree::norecpreorder(bintreenode* t)

if (s.empty())

return;

t = s.top();

s.pop();

t = t->getright(); }}

templateinline void bintree::norecinorder(bintreenode* t)

if (s.empty())

return;

t = s.top();

s.pop();

cout << t->getdata() << endl;

t = t->getright(); }}

templateinline void bintree::norecpostorder(bintreenode* t)

} if (i == 1)

} if (i == 2) }}

templateinline void bintree::createbintree(t stop)

templateinline bintreenode* bintree::create()

else

}templateinline bintreenode* bintree::copytree(bintreenode* t)

測試程式:

#include#include"bintree.h"

using namespace std;

int main()

測試資料:

a b d h # # # e # # c f # # g # #

C 實現二叉樹

其中的 linkstack.h 和 linkqueue 分別在 以下兩篇博文裡 linkstack linkqueue include include linkstack.h include linkqueue.h using namespace std 定義節點 templatestruct no...

二叉樹C 實現

最近整理原來的一些 腦子有點不好使,還是記下來吧。binary tree.h,遍歷包含了遞迴和非遞迴兩種,層次遍歷 ifndef binary tree h define binary tree h templatestruct binode templateclass bitree endif b...

C 實現二叉樹

實現 pragma once include include include using namespace std templatestruct bintreenode templateclass binarytree binarytree char str 根據先序字串行建立二叉樹 binary...