二叉樹節點類:
/*二叉樹結點類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...